home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 January / CHIP Turkiye Ocak 1998.iso / ARACLAR / LOTUSORG / ACROREAD / DOC.LSS < prev    next >
Text File  |  1996-06-20  |  90KB  |  2,423 lines

  1. '/*********************************************************************
  2. ''
  3. ''   Module Name:   DOC.lss
  4. ''
  5. ''   Module Code:   COMINST
  6. ''
  7. ''   Author:              
  8. ''
  9. ''   Creation Date:       Jan 26, 1994
  10. ''
  11. ''   Copyright Lotus Development Corporation, (c) 1994
  12. ''
  13. ''
  14. ''  
  15. ''   Description: 
  16. ''  
  17. ''
  18. ''   Additional authors:
  19. ''
  20. ''   Change History:
  21. ''   $Log:   //CIT/VOL1/CFLOG/logfiles/cominst/dockit/doc____@.lss  $
  22. '' 
  23. ''    Rev 1.52   01 Sep 1995 13:11:38   amontalv
  24. '' Correction to how icons are named.  Had used call to Lot_GetProgFolder, which was
  25. '' only needed when registering the link object.
  26. '' 
  27. ''    Rev 1.51   29 Aug 1995 14:16:52   tveerapp
  28. '' Commented out code to surface default preferences dialog.
  29. '' 
  30. ''    Rev 1.50   28 Aug 1995 16:59:30   tveerapp
  31. '' FIxed the node initcopylist code that turned off sections not installed on
  32. '' the server.
  33. '' 
  34. ''    Rev 1.49   28 Aug 1995 13:41:40   tveerapp
  35. '' No change.
  36. '' 
  37. ''    Rev 1.48   28 Aug 1995 13:40:12   tveerapp
  38. '' Removed the example for registering the Program Group for
  39. '' uninstall. This fixes an spr.
  40. '' 
  41. ''    Rev 1.47   25 Aug 1995 11:27:06   amontalv
  42. '' Made icons in all environments have same name.
  43. '' 
  44. ''    Rev 1.46   24 Aug 1995 10:30:48   jdonohue
  45. '' Added comment about USERDIR
  46. '' 
  47. ''    Rev 1.45   23 Aug 1995 12:26:54   tveerapp
  48. '' Added code to register work, masters and backup directories with the toolkit.
  49. '' 
  50. ''    Rev 1.44   22 Aug 1995 18:24:54   tveerapp
  51. '' Added the callback etc for work, smasters and backup.
  52. '' 
  53. ''    Rev 1.43   22 Aug 1995 15:17:10   jdonohue
  54. '' Do not register the uninstaller for language install
  55. '' 
  56. ''    Rev 1.42   22 Aug 1995 14:03:20   jdonohue
  57. '' Changed GetDOCPathfromLotusIni to check for registry entries
  58. '' Function GetDOCPathfromLotusIni returns path w/o filename now
  59. '' 
  60. ''    Rev 1.41   21 Aug 1995 15:50:54   amontalv
  61. '' Added global for registry entry.
  62. '' 
  63. ''    Rev 1.40   21 Aug 1995 10:23:48   jdonohue
  64. '' Added calls in Init for marking secondary language content directories
  65. '' Moved language directory symbol setting code to InitCopyList
  66. '' 
  67. ''    Rev 1.39   17 Aug 1995 09:34:14   amontalv
  68. '' Had put wrong number of arguments.
  69. '' 
  70. ''    Rev 1.38   16 Aug 1995 20:35:30   amontalv
  71. '' Added some error handling for registry.
  72. '' 
  73. ''    Rev 1.37   15 Aug 1995 11:53:12   jdonohue
  74. '' Removed SYM_INSTALLKIND$ -- in GLOBALS.LSS
  75. '' 
  76. ''    Rev 1.36   09 Aug 1995 09:18:16   jdonohue
  77. '' Don't add language qualifier to icon for first time install
  78. '' 
  79. ''    Rev 1.35   04 Aug 1995 15:53:38   jdonohue
  80. '' Added code to create icons with language switch and sublanguage name appended
  81. '' 
  82. ''    Rev 1.34   02 Aug 1995 16:54:54   jdonohue
  83. '' Changed calling syntax for InitLanguageDOC
  84. '' 
  85. ''    Rev 1.33   31 Jul 1995 16:28:10   pdonahue
  86. '' changed verison number from 2.1 to 0.0. 
  87. '' Changed registry entry for installtype from type REG_SZ to REG_DWORD.
  88. '' 
  89. ''    Rev 1.32   20 Jul 1995 14:20:58   jdonohue
  90. '' Fixed uninstall command line string for language
  91. '' 
  92. ''    Rev 1.31   12 Jul 1995 17:07:18   jdonohue
  93. '' Added comments about language install subdirectories
  94. '' 
  95. ''    Rev 1.30   23 Jun 1995 13:55:56   mzgripce
  96. '' remove autoinst.rsp from the uninstaller registration example
  97. '' 
  98. ''    Rev 1.29   23 Jun 1995 13:24:56   mzgripce
  99. '' added an example for the Program_group class registration
  100. '' 
  101. ''    Rev 1.28   22 Jun 1995 18:38:14   mzgripce
  102. '' register the components that are going with the doc product:aswan and its 
  103. '' dependency: LotusScript,Bento and Shared help
  104. '' 
  105. ''    Rev 1.27   21 Jun 1995 18:01:26   mzgripce
  106. '' add examples for the other object clases registration for uninstall
  107. '' 
  108. ''    Rev 1.26   21 Jun 1995 12:48:08   jdonohue
  109. '' SYM_INSTALLKIND global symbol, not product specific
  110. '' 
  111. ''    Rev 1.25   21 Jun 1995 09:09:42   jdonohue
  112. '' Moved AddRegistryLanguage to AddRegistryKeysDOC
  113. '' 
  114. ''    Rev 1.24   19 Jun 1995 17:41:56   mzgripce
  115. '' change the doc version to 2.1 and enable the uninstaller registration 
  116. '' 
  117. ''    Rev 1.23   19 Jun 1995 16:53:24   mzgripce
  118. '' add examples calls to Lot_RegisterObject()
  119. '' 
  120. ''    Rev 1.22   16 Jun 1995 17:08:02   pdonahue
  121. '' added registry entries for doc.
  122. '' 
  123. ''    Rev 1.21   09 Jun 1995 17:00:58   mzgripce
  124. '' added call example in PostCopyConfig to register the uninstaller
  125. '' 
  126. ''    Rev 1.20   07 Jun 1995 16:32:08   amontalv
  127. '' Changed the Win95 start folder so that it initializes
  128. '' earlier in the program.  This should make automation
  129. '' easier to implement for it.  There are still a couple of
  130. '' bugs that I need to work out, but I feel that I should
  131. '' check what I have now.  I also changed the name of some
  132. '' of the functions to conform more to current names.
  133. '' 
  134. ''    Rev 1.19   01 Jun 1995 14:54:10   amontalv
  135. '' Had the check incorrect for creating links.  It tried to create links
  136. '' when not in Win95 instead of when in Win95.
  137. '' 
  138. ''    Rev 1.18   01 Jun 1995 11:11:52   amontalv
  139. '' Added API function CreateLink to create shortcuts.  Also added functions
  140. '' to save and get the link path to support the CreateLink.  I also changed
  141. '' the startup program folder code to use the default dialog proc and changed
  142. '' the default dialog proc to process directory trees.
  143. '' 
  144. ''    Rev 1.17   30 May 1995 16:01:00   jdonohue
  145. '' Set symbols for product and version for language install
  146. '' 
  147. ''    Rev 1.16   21 May 1995 17:30:24   mzgripce
  148. '' add an example for share32 support 
  149. '' 
  150. ''    Rev 1.15   19 May 1995 15:31:28   mzgripce
  151. '' use the parent dir in the product default destination
  152. '' 
  153. ''    Rev 1.14   19 May 1995 14:42:44   jdonohue
  154. '' Remove redundant symbol for language subdirectory
  155. '' 
  156. ''    Rev 1.13   19 May 1995 13:23:46   jdonohue
  157. '' Added call to Lot_SetLanguageSectionsOn
  158. '' 
  159. ''    Rev 1.12   18 May 1995 15:36:52   jdonohue
  160. '' Added language install code
  161. '' 
  162. ''    Rev 1.11   18 May 1995 10:18:52   jdonohue
  163. '' Added language install function InitLanguage
  164. '' 
  165. ''    Rev 1.9   02 May 1995 12:54:06   cmoy
  166. '' Merged c2 into cf build
  167. '' 
  168. ''    Rev 1.9   10 Apr 1995 18:11:28   amontalv
  169. '' Changed comments to reflect change of function reference.
  170. '' 
  171. ''    Rev 1.8   31 May 1994 13:54:42   mmeth
  172. '' 
  173. '' Added PrevVersionDOC
  174. '' 
  175. ''    Rev 1.7   13 May 1994 14:09:20   thangv
  176. '' 
  177. '' Added the else part to the default code in InitDOC case node.
  178. '' 
  179. ''    Rev 1.6   06 May 1994 09:24:52   mmeth
  180. '' wrong return for function
  181. '' 
  182. ''    Rev 1.5   02 May 1994 19:18:16   mzgripce
  183. '' 
  184. '' add AddIconsDOC
  185. '' 
  186. ''    Rev 1.4   28 Mar 1994 17:25:50   thangv
  187. '' 
  188. '' Resourced strings that were not. SID_DOC_SERVER_DIRNAME, SID_DOC_DIST_DIRNA
  189. '' 
  190. ''    Rev 1.3   22 Mar 1994 09:24:46   mmeth
  191. '' Modified AddTo Billboard List to use IDD_DOCBILLBD1,...
  192. '' 
  193. ''    Rev 1.2   17 Feb 1994 17:44:44   thangv
  194. '' Fixed the trailing \ and DOC_DIR
  195. '' 
  196. ''    Rev 1.1   15 Feb 1994 14:36:20   mmeth
  197. '' moved the EXIT FUNCTION CALL in
  198. '' 
  199. ''    Rev 1.0   11 Feb 1994 10:53:40   jbrodeur
  200. '' Initial Revision
  201. ''----------------------------------------------------------------------
  202. ''   Date     Vers. Pgmr  SPR#  Change
  203. ''----------------------------------------------------------------------
  204. '' !
  205. ''  02-07-94   0000             Initial Product Shipment
  206. ''
  207. ''----------------------------------------------------------------------
  208. ''
  209. ''*********************************************************************/
  210. '**   This file contains detailed comments. PLEASE READ THEM! They provide
  211. '**   information that will make writing Install much easier. In some
  212. '**   cases, you will not find this information in any other sources.
  213. ''*********************************************************************/
  214. '**
  215.  
  216. USE "TOOLKIT"
  217. USE "LANGUAGE"
  218. OPTION DECLARE
  219.  
  220. '** These Are the Required Functions that Products must provide
  221. '***************************************************************
  222. DECLARE PUBLIC FUNCTION ProductRegDOC (prodno%, network$, direction$) AS STRING
  223. DECLARE PUBLIC FUNCTION DefaultUserRegDOC (prodno%, network$, direction$) AS STRING
  224. DECLARE PUBLIC FUNCTION InitDOC (prodno%, network$, direction$, basedir$) AS STRING
  225. DECLARE PUBLIC FUNCTION PrevVersionsDOC (prodno%, network$, direction$) AS STRING
  226. DECLARE PUBLIC FUNCTION PathChangeDOC (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
  227. DECLARE PUBLIC FUNCTION InitCopyListDOC (prodno%, network$, direction$) AS STRING
  228. DECLARE PUBLIC FUNCTION PreCopyConfigDOC (prodno%, network$, direction$, lic%) AS STRING
  229. DECLARE PUBLIC FUNCTION AddTheBillBoardsDOC (prodno%, network$, direction$, nbytes&) AS STRING
  230. DECLARE PUBLIC FUNCTION PostCopyConfigDOC (prodno%, network$, direction$, programgroup$) AS STRING
  231. DECLARE PUBLIC FUNCTION AddIconsDOC (prodno%, network$, direction$, programgroup$) AS STRING
  232. DECLARE PUBLIC FUNCTION UIDOC (prodno%, network$, direction$) AS STRING
  233. DECLARE PUBLIC FUNCTION PostSuccessRegDOC (prodno%, network$, direction$) AS STRING
  234. DECLARE PUBLIC SUB AddRegistryKeysDOC (prodno%, network$) 
  235. DECLARE PUBLIC FUNCTION InitLanguageDOC (prodno%, network$, direction$) AS STRING
  236.  
  237. '** Product specific functions
  238. '*****************************
  239. DECLARE FUNCTION GetDOCPathfromLotusIni() AS STRING
  240. DECLARE FUNCTION FindWindowA LIB "user32" (ByVal lpClassName As Any, ByVal lpCaption As Any) AS LONG
  241. DECLARE FUNCTION DetectPreviousVersion (Productfound$) AS STRING
  242. DECLARE SUB DOCRemoveProdFilesCB (hDlg&, CtrlId%, Classes$, LInst&)
  243. DECLARE SUB DOC_RegisterSharedComponent(Key$, FileName$, Version$)
  244.  
  245. '*************************************************************************
  246. '**************************** Required Functions *************************
  247. '*************************************************************************
  248.  
  249. '*************************************************************************
  250. '** SUB Initialize
  251. '**
  252. '** Purpose: The only purpose of this routine is to register your product.
  253. '**          This routine assigns your acronym to your product.
  254. '**          Without this function, your product will not install.
  255. '**          All you need to do in this subroutine is:
  256. '**                   modify DOC -> your acronym.
  257. '**
  258. '**          ASSUMPTIONS: Many things in the toolkit key off of your
  259. '**                       acronym. These are the constraints:
  260. '**                       1. Your top level chapter in the INF must
  261. '**                          have a KEYWORD of your acronym +"TOP"
  262. '**                          e.g. acronymTOP
  263. '** Author:  Marcel Meth  
  264. '** Arguments: None
  265. '** Returns:   NONE
  266. '*************************************************************************
  267. SUB Initialize
  268.    Reg_RegisterProductNames "DOC", LdString(SID_DOC_COMMERCIALNAME) 
  269. END SUB
  270.  
  271. '*************************************************************************
  272. '** FUNCTION ProductRegDOC (prodno%, network$, direction$) AS INTEGER
  273. '**
  274. '** Purpose: This function allows your product to register itself
  275. '**          in the Install Product Registry.  The toolkit stores
  276. '**          the information provided and will provide you with
  277. '**          various features accordingly.  For example, if you support
  278. '**          shared files, the toolkit will do most of the work
  279. '**          for the LOTUSAPP directory.
  280. '**
  281. '**          For the most part you should use only Reg_Set... Functions.
  282. '**          
  283. '**
  284. '**          If you turn on ATM, LICENSING, or SHARED tools, then
  285. '**          you must be sure to add the appropriate lines and files
  286. '**          in your acronym.SCR and acronym.LYT, respectively. 
  287. '**          See Cookbook.
  288. '**
  289. '**          If you support server install, (because you need the files
  290. '**          for Licenser), you will have to make sure that you have 
  291. '**          the correct **entire** contents of install.lyt and install.scr 
  292. '**          for the install files in your acronym.SCR and acronym.LYT
  293. '**          
  294. '**
  295. '** Arguments:  All paremeters are **read only**. 
  296. '**          prodno%: This is your prodno%.  It is assigned to you by the
  297. '**                   toolkit in the order in which you were registered.
  298. '**                   When your product is part of SmartSuite, SmartSuite
  299. '**                   will always be product #1. (prodno% >=1)
  300. '**          network$: UNINITIALIZED
  301. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  302. '**                      then step backwards, i.e start at your last dialog
  303. '**                      first.
  304. '**     
  305. '** Errors:    No return code for errors, you must Raise them
  306. '** Author:    MMeth
  307. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  308. '**                             allow the user to step backwards.)
  309. '*************************************************************************
  310.  
  311. PUBLIC FUNCTION ProductRegDOC (prodno%, network$, direction$) AS STRING
  312.    ProductRegDOC = gNEXT
  313.  
  314.    '** FOR a complete set of things to register
  315.    '** see API doc under Reg_Set...
  316.  
  317.    Reg_SetSupportedInstallTypes prodno%, 1, 1, 1
  318.    Reg_SetProdSizes prodno%, 3 * 1048576, 2 * 1048576
  319.  
  320.    '** If you need Lotusapp or datalens support turn this on.
  321. ''   Reg_SetShareFlags prodno%, 1, 1, 1, 1 
  322. '' JH commented-out ShareFlags for Org DocOnline (unsupported in CIT 2.1)
  323.    '** If you need Components directory turn this on.
  324.    Reg_SetShare32Flag prodno%, 1
  325.  
  326.    '** Coming to an install program near you soon
  327.    'Reg_SetCDOption prodno%,Inst%,CDOptStr$ 
  328.    'Reg_SetCDOptionSelected ProdNo%,Inst%,Selection% 
  329.  
  330.    '** Any options that you want your sys-admin and node user to see
  331.    '** must be entered here.  They must correspond with keywrods in the
  332.    '** inf file. This functionality will be avilable March 4, but you
  333.    '** can set these fields now!
  334.    'Reg_SetNodeOption ProdNo%,Inst%,NodeOptStr$  
  335.    'Reg_SetNodeOptionSelected ProdNo%,Inst%,Selection% 
  336.  
  337.    '** Toolkit default is for no server supprt, turn on if desired.
  338.    Reg_SetSrvSupport prodno%, 1
  339.  
  340.    '** Toolkit default is for no server supprt, turn on if desired.
  341.    '** license support only available for server install.
  342.    Reg_SetLicenseSupport prodno%, 0
  343.  
  344.    '** Toolkit default is no ATM support
  345.    'Reg_SetATMSupport prodno%, 0
  346.  
  347.    '** This is the default value the user will see.
  348.    Reg_SetProgManagerGroup prodno%, LdString(SID_DOC_PROG_GROUP)
  349.  
  350.    '** Required if you have a work, smartmasters and backup directories
  351.    '** register support with the toolkit to surface the dialog
  352.    'Reg_SetMoreDirsData prodno%, "DOCMOREDIRSCB", DBDOC_MOREDIRS, DBDOC_MOREDIRS        
  353.  
  354.  
  355. END FUNCTION
  356.  
  357. '*************************************************************************
  358. '** FUNCTION DefaultUserRegDOC (prodno%, network$, direction$) AS STRING
  359. '**
  360. '** Purpose: **Only** the first registered product gets called.
  361. '**          For SmartSuite, this will be SmartSuite.
  362. '**          This function allows you to set the default user registration
  363. '**          information that the user will be shown. The toolkit
  364. '**          will provide default values from MS-Windows. If you disagree
  365. '**          with them you should modify them in this function using:
  366. '**          SetSymbolValue on SYM_NAME, SYM_COMPANY & SYM_SERIALNUM$
  367. '**          
  368. '**          It is up to you how you store registration information.
  369. '**          It will not be stored until later in PostCopyConfigDOC.
  370. '**          The CIT provides functions that allow you to access .ri 
  371. '**          files: Lot_ReadDefaultsfromRi(ripath$).
  372. '**
  373. '**          If you need to write back to the floppy, do it here.
  374. '**          Most Lotus products will no longer write back to the floppy.
  375. '**          Remeber, you can't write back to a CD or network!
  376. '**
  377. '** In Symbols : SYM_NAME$, SYM_COMPANY$
  378. '** Out Symbols: SYM_NAME$, SYM_COMPANY$, SYM_SERIALNUM$
  379. '**            
  380. '** Arguments:  All paremeters are **read only**. 
  381. '**          prodno%: This is your prodno%.  It is assigned to you by the
  382. '**                   toolkit in the order in which you were registered.
  383. '**                   When your product is part of SmartSuite, SmartSuite
  384. '**                   will always be product #1. (prodno% >=1)
  385. '**          network$: UNINITIALIZED
  386. '**          network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  387. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  388. '**                      then step backwards
  389. '**     
  390. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  391. '**                      then step backwards, i.e start at your last dialog
  392. '**                      first.
  393. '**     
  394. '** Errors:    No return code for errors, you must Raise them
  395. '** Author:    MMeth
  396. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  397. '**                             allow the user to step backwards.)
  398. '*************************************************************************
  399.  
  400. PUBLIC FUNCTION DefaultUserRegDOC (prodno%, network$, direction$) AS STRING
  401.    DIM ripath$, defdir$, temp%, rc%
  402.  
  403.    DefaultUserRegDOC = gNEXT
  404.  
  405.    rinotfound:
  406.  
  407.  
  408.    END FUNCTION
  409.  
  410.  
  411. '*************************************************************************
  412. '** FUNCTION InitDOC (prodno%, network$, direction$, basedir$) AS STRING
  413. '**
  414. '** Purpose: This function will be called after the Welcome dialog has been
  415. '**          filled in by the user. This is the first time you will be 
  416. '**          called when the server parameter is valid.  
  417. '**          You need to use this function to intialize certain things. 
  418. '**          (See the MUST DO below).
  419. '**          
  420. '**          This is a good place to put up a LotusScript messagebox warning the user
  421. '**          of a previous version of your product. If there is a previous
  422. '**          version you might want to steer them towards overwriting it,
  423. '**          deleting the old version, or allowing both versions to exist.
  424. '**          
  425. '**
  426. '** Must Do: You **MUST** set inital values for all of the destination
  427. '** =======  directories that you refer to in your INF file.  If you do not,
  428. '**          then InitCopylist will fail!  e.g. SetSymbolValue "DOCDIR", basedir$
  429. '**          Of course you may be more intelligent.  You should preface your
  430. '**          directory with basedir$.  The toolkit is finding a good drive
  431. '**          letter and basedirectory.  Also, remeber all paths end in a
  432. '**          \ and are lower case.
  433. '**
  434. '**          You should **NOT** define LOTUSAPPDIR, NETLOTUSAPPDIR, WINDIR, 
  435. '**          USERDIR & WINSYSDIR. The toolkit does this for you.
  436. '**
  437. '**          Once you have defined destdir symbols, you need to register
  438. '**          them with the toolkit. (See the code below)
  439. '**
  440. '** In Symbols : 
  441. '** Out Symbols: 
  442. '**            
  443. '** Arguments:  All paremeters are **read only**. 
  444. '**          prodno%: This is your prodno%.  It is assigned to you by the
  445. '**                   toolkit in the order in which you were registered.
  446. '**                   When your product is part of SmartSuite, SmartSuite
  447. '**                   will always be product #1. (prodno% >=1)
  448. '**          network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  449. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  450. '**                      then step backwards
  451. '**     
  452. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  453. '**                      then step backwards, i.e start at your last dialog
  454. '**                      first.
  455. '**
  456. '**          basedir$:   The toolkit has found a good base. for your directory.
  457. '**                      This is it.  You should use it.  This will make Smart
  458. '**                      Suite work, and will pick a good drive letter for you.
  459. '**     
  460. '** Errors:    No return code for errors, you must Raise them
  461. '** Author:    MMeth
  462. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  463. '**                             allow the user to step backwards.)
  464. '**
  465. '*************************************************************************
  466.  
  467. PUBLIC FUNCTION InitDOC (prodno%, network$, direction$, basedir$) AS STRING
  468. DIM sym$, symname$, defdir$, position%, proddir$, iniPath$, rv%
  469. DIM parentdir$, Docversion$, lotusiniPath$
  470. DIM nFind%, previousprod$, Productfound$, temp%, fullpath$
  471.  
  472.  
  473.    InitDOC = direction$
  474.    '' In the backwards case, keep backing up
  475.    If direction$ = gBACK Then
  476.       EXIT FUNCTION
  477.    End If
  478.  
  479.    '** Put up dialog box if a version is currently running
  480.    '** Use the window class name and see if we can find it
  481.    IF network$ <> gDISTRIBUTION  then
  482.  
  483.       nFind% = FindWindowA ("Acrobat Viewer",0& )
  484.       while direction$ = gNEXT$ AND nFind% <> 0 
  485.        direction$ = PopupModalDlg (DBDOC_RUNNING, DBDOC_RUNNING)
  486.        if direction$ = gBACK$ then
  487.         InitDOC = direction$
  488.         EXIT FUNCTION
  489.        end if
  490.        nFind% = FindWindowA ("Acrobat Viewer",0&)
  491.       wend              
  492.                                          
  493.    End if
  494.  
  495.    '***   Setup Default directory settings
  496.        basedir$ = GetSymbolValue(SYM_BASEDIR$)
  497.  
  498.    sym$ = Reg_GetDirSymbolList(prodno%)
  499.    symname$ = sym$ + gNAME
  500.  
  501. 'SUIT   IF network$ <> gDISTRIBUTION  then
  502. 'SUIT
  503. 'SUIT     IF IsLongDirPath(basedir$) = TRUE THEN
  504. 'SUIT    IF GetSymbolValue(SYM_SINGLESMARTSUITE$) = gSMARTSUITE$ THEN
  505. 'SUIT       basedir$ = GetSymbolValue(SYM_BASE16DIR$)
  506. 'SUIT    ELSE
  507. 'SUIT       ErrorMsg SID_DOC_LONGDIRPATHINVALID, ""
  508. 'SUIT       direction$ = gBACK
  509. 'SUIT       InitDOC = direction$
  510. 'SUIT       EXIT FUNCTION
  511. 'SUIT    END IF
  512. 'SUIT     ELSEIF Lot_IsUnvalidatedUNCPath(basedir$) = TRUE AND _
  513. 'SUIT      network$ <> gSERVER THEN
  514. 'SUIT    IF GetSymbolValue(SYM_SINGLESMARTSUITE$) = gSMARTSUITE$ THEN
  515. 'SUIT       basedir$ = GetSymbolValue(SYM_BASE16DIR$)
  516. 'SUIT    ELSE
  517. 'SUIT       ErrorMsg SID_DOC_UNCPATHINVALID, ""
  518. 'SUIT       direction$ = gBACK
  519. 'SUIT       InitDOC = direction$
  520. 'SUIT       EXIT FUNCTION
  521. 'SUIT    END IF
  522. 'SUIT     End If
  523. 'SUIT   End If
  524.  
  525.  
  526.   
  527.    '' Setup Default directory settings and the associated
  528.    '' text that the user will see
  529.  
  530.    basedir$ = GetSymbolValue(SYM_BASEDIR$)
  531.    sym$ = Reg_GetDirSymbolList(prodno%)
  532.    symname$ = sym$ + gNAME
  533.  
  534.    ''These two line register it with the toolkit.
  535.    SetListItem sym$, 1, "DOCDIR"
  536.    SetListItem symname$, 1, "DOCDIRNAME"
  537.  
  538.    '** NOTE The path in the string table is lower case and ends with a slash
  539.     SetSymbolValue "DOCDIR", basedir$ + LdString(SID_DOC_DIR)
  540.  
  541.    '** This will be the name of the directory that shows up in captions in 
  542.    '** toolkit dialogs (Static text)
  543.    SetSymbolValue "DOCDIRNAME", LdString(SID_DOC_DIRNAME)
  544.  
  545.    SetSymbolValue "DOCOBSDIR1", basedir$ + LdString(SID_DOC_DIR)
  546.    SetSymbolValue "DOCOBSDIR2", basedir$ + LdString(SID_DOC_DIR)
  547.  
  548.    '** Put up a dlg box, if previous version of product found
  549.    '==========================================================
  550.    If network$ = gSTANDARD$ Then
  551.       previousprod$ = DetectPreviousVersion(Productfound$)
  552.  
  553.  
  554.      If Productfound$ = "True" Then
  555.     Reg_SetObsFiles prodno%,1
  556.      
  557.    else 
  558.      If previousprod$ = "YES" Then
  559.     if GetSymbolValue(SYM_SINGLESMARTSUITE$) = gSMARTSUITE$ then
  560.        Reg_SetPreviousVersion prodno%,"1"
  561.     else
  562.       direction$ = PopupModalDlg (DB_EXISTINGDOC, DB_EXISTINGDOC)
  563.       If direction$ = gBACK Then
  564.          InitDOC = direction$
  565.          EXIT FUNCTION
  566.       End If
  567.     End if
  568.    end if
  569.      End if 
  570.    End if 
  571.  
  572.    '' Special Cases for setting  these symbols
  573.    '' Strings should be resourced, but we didn't want to clutter
  574.    '' the DOC string table.
  575.    SELECT CASE network$
  576.  
  577.    CASE gSERVER$
  578.       SetSymbolValue "DOCNAME", LdString(SID_DOC_SERVER_DIRNAME) 
  579.  
  580.    CASE gDISTRIBUTION$
  581.       SetSymbolValue "DOCNAME", LdString(SID_DOC_DIST_DIRNAME)
  582.  
  583.    CASE gSTANDARD$, gNODE$
  584.       
  585.       
  586.       iniPath$ = GetWindowsDir() + "lotus.ini"
  587.  
  588.       if DoesFileExist(inipath$,femExists) then
  589.          defdir$ = GetIniKeyString( iniPath$,"Lotus Applications", "DocOnline")
  590.          
  591.          'print defdir$ 
  592.  
  593.      if defdir$ <> "" then
  594.             
  595.         temp% = INSTR(1,LCASE$(defdir$),"release")
  596.         if temp% <> 0 then
  597.            Docversion$ = MID$(defdir$,(temp%+8),3)
  598.             else 
  599.                Docversion$ = "0"
  600.         end if            
  601.  
  602.         IF (Docversion$ = "2.1")  THEN
  603.            temp% = INSTR(1,LCASE$(defdir$),"acroread.exe")
  604.  
  605.            proddir$ = MID$(defdir$,1,(temp%-1))
  606.         'print "proddir=" proddir$
  607.  
  608.            rv% = Lot_CleanPath(proddir$)
  609.                
  610.                fullpath$ = proddir$ + "acroread.exe"
  611.  
  612.            if DoesFileExist(fullpath$, femExists) = 0 then
  613.                   
  614.                   'Find same version of acroread dir with no files
  615.                   IF GetSymbolValue(SYM_SINGLESMARTSUITE$) = gSMARTSUITE$ THEN
  616.              proddir$ = basedir$ + LdString(SID_DOC_DIR) 
  617.              'proddir$ = basedir$ + LdString(SID_DOC_DIR) + LdString(SID_DOC_BOOK_DIR)                          proddir$ = basedir$ + LdString(SID_DOC_DIR) + LdString(SID_DOC_BOOK_DIR)
  618.  
  619.           ELSE
  620.              proddir$ = GetSymbolValue(SYM_BASEDIR$) + LdString(SID_DOC_DIR)
  621.           END IF
  622.                End if
  623.  
  624.             Else
  625.             
  626.                IF GetSymbolValue(SYM_SINGLESMARTSUITE$) = gSMARTSUITE$ THEN
  627.           proddir$ = basedir$ + LdString(SID_DOC_DIR)
  628.            ELSE
  629.           proddir$ = GetSymbolValue(SYM_BASEDIR$) + LdString(SID_DOC_DIR)
  630.            END IF
  631.         END IF
  632.  
  633.          ELSE
  634.            IF GetSymbolValue(SYM_SINGLESMARTSUITE$) = gSMARTSUITE$ THEN
  635.           proddir$ = basedir$ + LdString(SID_DOC_DIR)
  636.            ELSE
  637.           proddir$ = GetSymbolValue(SYM_BASEDIR$) + LdString(SID_DOC_DIR)
  638.            END IF
  639.      END IF
  640.  
  641.       ELSE
  642.      IF GetSymbolValue(SYM_SINGLESMARTSUITE$) = gSMARTSUITE$ THEN
  643.         proddir$ = basedir$ + LdString(SID_DOC_DIR)
  644.      ELSE
  645.         proddir$ = GetSymbolValue(SYM_BASEDIR$) + LdString(SID_DOC_DIR)
  646.      END IF
  647.       END IF
  648.  
  649.       SetSymbolValue "DOCDIR", proddir$
  650.  
  651.       'print proddir$
  652.  
  653.    END SELECT
  654.  
  655. END FUNCTION
  656.  
  657. '*************************************************************************
  658. '** FUNCTION PrevVersionsDOC (prodno%, network$, direction$) AS STRING
  659. '**
  660. '** Purpose: This function is called only for SmartSUite.  It is called
  661. '**          immediately after all the other product functions for
  662. '**          InitDOC are called.  It allows SmartSuite to assess whether
  663. '**          there are older versions of products around.
  664. '**          
  665. '** In Symbols : 
  666. '** Out Symbols: 
  667. '**            
  668. '** Arguments:  All paremeters are **read only**. 
  669. '**          prodno%: This is your prodno%.  It is assigned to you by the
  670. '**                   toolkit in the order in which you were registered.
  671. '**                   When your product is part of SmartSuite, SmartSuite
  672. '**                   will always be product #1. (prodno% >=1)
  673. '**          network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  674. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  675. '**                      then step backwards
  676. '**     
  677. '**          direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  678. '**                      then step backwards, i.e start at your last dialog
  679. '**                      first.
  680. '**
  681. '** Errors:    No return code for errors, you must Raise them
  682. '** Author:    MMeth
  683. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  684. '**                             allow the user to step backwards.)
  685. '**
  686. '*************************************************************************
  687.  
  688. PUBLIC FUNCTION PrevVersionsDOC (prodno%, network$, direction$) AS STRING
  689. DIM nProducts%, prodIndex%, i%
  690.  
  691.       nProducts% = Reg_GetNumberOfProducts()
  692.       FOR prodIndex% = 1 to nProducts%
  693.       If Reg_GetPreviousVersion(prodIndex%) <> "" Then
  694.          i% = DoMsgBox("Older Versions Found","", MB_OK)
  695.          GOTO PREVPRODFOUND
  696.       End If
  697.       NEXT
  698.  
  699. PREVPRODFOUND:
  700.  
  701. END FUNCTION
  702.  
  703.  
  704. '*************************************************************************
  705. '** FUNCTION PathChangeDOC (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
  706. '**
  707. '** Purpose: This function is called whenever the user proposes changes
  708. '**          to a path for your product.  By the time this function calls
  709. '**          you, the paths have already been checked syntactically, and
  710. '**          the directory has been checked to see that it is writeable.
  711. '**          Your obligation is to verify that the proposed new path is ok
  712. '**          with you.  If not, put up a Lotus Script :"MESSAGEBOX" 
  713. '**          telling the user and return gBACK.
  714. '**          
  715. '** In Symbols : 
  716. '** Out Symbols: 
  717. '**            
  718. '** Arguments:  All paremeters are **read only**. 
  719. '**          prodno%: This is your prodno%.  It is assigned to you by the
  720. '**                   toolkit in the order in which you were  registered.
  721. '**                   When your product is part of SmartSuite, SmartSuite
  722. '**                   will always be product #1. (prodno% >=1)
  723. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  724. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  725. '**                      then step backwards
  726. '**      destdirsym$: The destdir symbol that has changed. e.g. "DOCDIR"
  727. '**   mainprodsonly%: (TRUE | FALSE) , when TRUE this means that only
  728. '**                   your top level product directory should change,
  729. '**                   probably "DOCDIR". When it is false, it means that
  730. '**                   all related directories should change. It is **YOUR
  731. '**                   RESPONSIBILITY**  to implement this functionality.
  732. '**     
  733. '** Errors:    No return code for errors, you must Raise them
  734. '** Author:    MMeth
  735. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  736. '**                             allow the user to step backwards.)
  737. '**
  738. '*************************************************************************
  739.  
  740. PUBLIC FUNCTION PathChangeDOC (prodno%, network$, direction$, destdirsym$, mainprodsonly%) AS STRING
  741. DIM path$
  742.  
  743.    PathChangeDOC = gNEXT
  744.  
  745.    path$ = GetSymbolValue ("DOCDIR")
  746.  
  747. 'SUIT   If network$ <> gDISTRIBUTION  then
  748. 'SUIT
  749. 'SUIT       IF IsLongDirPath(path$) = TRUE THEN
  750. 'SUIT       '** output "FAT path only" dialog
  751. 'SUIT      ErrorMsg SID_DOC_LONGDIRPATHINVALID, ""
  752. 'SUIT      PathChangeDOC = gBACK
  753. 'SUIT          EXIT FUNCTION 
  754. 'SUIT       ELSE 
  755. 'SUIT       IF Lot_IsUnvalidatedUNCPath(path$) = TRUE THEN
  756. 'SUIT       '** output "NO UNC" paths dialog
  757. 'SUIT         ErrorMsg SID_DOC_UNCPATHINVALID, ""
  758. 'SUIT          PathChangeDOC = gBACK
  759. 'SUIT         EXIT FUNCTION 
  760. 'SUIT       ELSE 
  761. 'SUIT         PathChangeDOC = gNEXT
  762. 'SUIT       End if 
  763. 'SUIT       End IF
  764. 'SUIT  END If
  765.  
  766.    '' The following is a psudocode example
  767.    ''''''rc$ = DetectVersionPriorToDarwin(path$)
  768.    ''''''If rc$ = "BEAGLE" then
  769.    ''''''   ShowPathError SID_BEAGLE_FOUND, SID_ERR_EXISTBEAGLE, path$
  770.    ''''''   PathChangeDOC = gBACK
  771.    ''''''end if   
  772.  
  773. END FUNCTION
  774.  
  775.  
  776.  
  777.  
  778. '*************************************************************************
  779. '** FUNCTION InitCopyListDOC (prodno%, network$, direction$) AS STRING
  780. '**
  781. '** Purpose:  Product must Initialize the copylist
  782. '**          
  783. '** Must Do: You must initialize the copy list.  However,
  784. '** =======  if you leave the code as is (don't touch it at all),
  785. '**          it will probably work for you. Copy list must be initialized.
  786. '**          CAUTION: Make sure that your toplevel section in the
  787. '**                   acronym.SCR has a keyword of "acronymTOP"
  788. '**
  789. '** In Symbols : 
  790. '** Out Symbols: 
  791. '**            
  792. '** Arguments:  All paremeters are **read only**. 
  793. '**          prodno%: This is your prodno%.  It is assigned to you by the
  794. '**                   toolkit in the order in which you were registered.
  795. '**                   When your product is part of SmartSuite, SmartSuite
  796. '**                   will always be product #1. (prodno% >=1)
  797. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  798. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  799. '**                      then step backwards
  800. '**     
  801. '** Errors:    No return code for errors, you must Raise them
  802. '** Author:    MMeth
  803. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  804. '**                             allow the user to step backwards.)
  805. '**
  806. '*************************************************************************
  807.  
  808. PUBLIC FUNCTION InitCopyListDOC (prodno%, network$, direction$) AS STRING
  809. DIM i%, sym$, chpt$, nextprod$, notused%, FeatureToFind$
  810. DIM bookchapter$, turnoff%, book$, TempString$, chapter$
  811.  
  812. ON Error STFQUIT GOTO COPYLISTERROR
  813.  
  814.     ''       ****** Language Install Code ******
  815.    '' For each component that will have language subdirectories for the
  816.    '' non-primary language, set the symbols appropriately
  817.    If GetSymbolValue(SYM_INSTALLKINDS$) = gLANGUAGEINSTALL$ Then
  818.     'For content, that will have separate subdirectories for non-primary language
  819.     'versions, call this function for a language install
  820.       SetLanguageSubdir "DOCLANGDIR", "DOCDIR"
  821.    Else
  822.     'For non-language install, they will all go into the same directory
  823.     'same directory, for example:
  824.       SetSymbolValue "DOCLANGDIR", GetSymbolValue("DOCDIR")
  825.    End if
  826.  
  827.    InitCopyListDOC = direction$
  828.    '' In the backwards case, keep backing up
  829.    If direction$ = gBACK Then
  830.       EXIT FUNCTION
  831.    End If
  832.  
  833.  
  834.    sym$ = Reg_GetProductAcronym(prodno%) + gTOP$
  835.    chpt$ = Lot_GetChapterFromKeyWord(sym$)
  836.    If chpt$ = "" Then
  837.       ERROR STFQUIT
  838.    End IF
  839.  
  840.    SELECT CASE Reg_GetProdSelectedInstallType(prodno%)
  841.  
  842.    CASE gCOMPLETE$
  843.       i% = F_COMPLETE
  844.    CASE gLAPTOP$
  845.       i% = F_LAPTOP
  846.    CASE gCUSTOM$
  847.       i% = F_CUSTOM
  848.    END SELECT
  849.  
  850.    Lot_InitializeCopyList chpt$, i%
  851.  
  852.    'jhs: set the books off in standard case
  853.    if network$ = gSERVER$ then
  854.  
  855.       'turn off tab section
  856.       bookchapter$ = Lot_GetChapterFromKeyWord("DOCBOOKS_TAB")
  857.       turnoff% = Lot_SetChapterFilesInCopyListInOrOut(bookchapter$,1)  
  858.  
  859.       'turn off parent section
  860.       bookchapter$ = Lot_GetChapterFromKeyWord("DOCBOOKS")
  861.       turnoff% = Lot_SetChapterFilesInCopyListInOrOut(bookchapter$,1)  
  862.  
  863.       for i% = 1 to 9
  864.  
  865.     book$ = "DOCBOOK_" + CSTR(i%)
  866.     bookchapter$ = Lot_GetChapterFromKeyWord(book$)
  867.     turnoff% = Lot_SetChapterFilesInCopyListInOrOut(bookchapter$,1)  
  868.  
  869.       NEXT
  870.  
  871.    end if  
  872. '' JH for Org DocOnline, don't install uninstall if reader is not installed
  873.     IF network$ = gSTANDARD$ THEN
  874.         IF FIsKeywordInCopyList("DOCFILES") = 0 THEN
  875.             TempString$ = "WIN32SHRUINST"
  876.             chapter$ = Lot_GetChapterFromKeyword(TempString$)
  877.             notused% = Lot_SetChapterFilesInCopyListInOrOut( chapter$, 0 )
  878.             TempString$ = "WIN32SHRUINSTLANGEN"
  879.             chapter$ = Lot_GetChapterFromKeyword(TempString$)
  880.             notused% = Lot_SetChapterFilesInCopyListInOrOut( chapter$, 0 )
  881.             TempString$ = "DOCWINDIR"
  882.             chapter$ = Lot_GetChapterFromKeyword(TempString$)
  883.             notused% = Lot_SetChapterFilesInCopyListInOrOut( chapter$, 0 )
  884.             TempString$ = "DOCHELP"
  885.             chapter$ = Lot_GetChapterFromKeyword(TempString$)
  886.             notused% = Lot_SetChapterFilesInCopyListInOrOut( chapter$, 0 )
  887.         END IF
  888.     END IF
  889.  
  890.    '** Make sure to turn off all sections not available on the server.
  891.    'If network$ = gNODE Then
  892.    '    nextprod$ = Lot_GetNextSibling(chpt$, F_NOTHING)  
  893.    '    chpt$ = Lot_GetFirst(chpt$, F_KEYWORD)  
  894.    '   WHILE (chpt$ <> "" AND chpt$ <> nextprod$)
  895.    '      FeatureToFind$ = Lot_GetChapterValStr(chpt$, F_KEYWORD)
  896.    '      If Lot_IsTheFeatureInstalled(FeatureToFind$) = FALSE Then
  897.    '         notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 0)
  898.    '      End If
  899.    '
  900.    '      chpt$ = Lot_GetNext() 
  901.    '   WEND
  902.    'End If
  903.  
  904.    
  905.    EXIT FUNCTION
  906.  
  907. COPYLISTERROR:
  908.    ErrorMsg 0, "Developers: You need to have licenser section with DOCTOP in INF file"
  909.    ERROR STFQUIT
  910.  
  911. END FUNCTION
  912.  
  913.  
  914. '*************************************************************************
  915. '** FUNCTION UIDOC (prodno%, network$, direction$) AS STRING
  916. '**
  917. '** Purpose: This is your chance to put up any User Interface
  918. '**          that you want.  Remember, try to keep it short.
  919. '**          In SmartSuite, if every product puts up two extra
  920. '**          dialogs, then the SmartSuite will consist of 16 dialogs!
  921. '**          
  922. '**          Pay attention to the value of direction, if you are putting
  923. '**          up more than one dialog.
  924. '**
  925. '**          The toolkit will do an accurate space computation later,
  926. '**          so you can tamper with the copy list. But you shouldn't
  927. '**          write out anything to the disk until PostCopyCofig!
  928. '**   
  929. '** In Symbols : 
  930. '** Out Symbols: 
  931. '**            
  932. '** Arguments:  All paremeters are **read only**. 
  933. '**          prodno%: This is your prodno%.  It is assigned to you by the
  934. '**                   toolkit in the order in which you were registered.
  935. '**                   When your product is oart of SmartSuite, SmartSuite
  936. '**                   will always be product #1. (prodno% >=1)
  937. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  938. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  939. '**                      then step backwards
  940. '**     
  941. '** Errors:    No return code for errors, you must Raise them
  942. '** Author:    MMeth
  943. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  944. '**                             allow the user to step backwards.)
  945. '**
  946. '*************************************************************************
  947.  
  948. PUBLIC FUNCTION UIDOC (prodno%, network$, direction$) AS STRING
  949.  
  950. DIM notused%, chpt$
  951.  
  952.    UIDOC = direction$
  953.    '' In the backwards case, keep backing up
  954.    If direction$ = gBACK Then
  955.       EXIT FUNCTION
  956.    End If
  957. ''    OUT FOR ORG DOCONLINE
  958. ''   if Reg_GetObsFiles (prodno%) = 1 AND _
  959. ''      GetSymbolValue (SYM_SINGLESMARTSUITE$) <> gSMARTSUITE$ AND _
  960. ''      network$ = gSTANDARD$ _
  961. ''   then
  962. ''      notused% = RegisterCallback("DOC", "DOCRemoveProdFilesCB")
  963. ''      direction$ = PopupModalDlg (DBDOC_REMOVEPRODFILES, DBDOC_REMOVEPRODFILES)
  964.     
  965.       '*    the callback did the work, on both IDC_OK and IDC_BACK we
  966.       '* actually want to go next
  967.       if direction$ = gBACK then
  968.          direction$ = gNEXT             
  969.       end if
  970. ''   end if
  971.  
  972.  
  973. END FUNCTION
  974.  
  975.  
  976.  
  977.  
  978. '*************************************************************************
  979. '** FUNCTION PreCopyConfigDOC (prodno%, network$, direction$, lic%) AS STRING
  980. '**
  981. '** Purpose: This is the very last function called before the space is
  982. '**          accurately computed (to the last byte) and files are copied
  983. '**          by the toolkit.  If you have any last minute changes to
  984. '**          do, this is the time to do them.  example:
  985. '**          Test for monitor resolution, and turn on the chapter
  986. '**          in the copy list (a memory residident version of the INF file)
  987. '**          with the appropriate resolution.
  988. '**          
  989. '** In Symbols : 
  990. '** Out Symbols: 
  991. '**            
  992. '** Arguments:  All paremeters are **read only**. 
  993. '**          prodno%: This is your prodno%.  It is assigned to you by the
  994. '**                   toolkit in the order in which you were registered.
  995. '**                   When your product is part of SmartSuite, SmartSuite
  996. '**                   will always be product #1. (prodno% >=1)
  997. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  998. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  999. '**                      then step backwards
  1000. '**             lic%: TRUE | FALSE; TRUE licensing is turned on else it is off
  1001. '**     
  1002. '** Errors:    No return code for errors, you must Raise them
  1003. '** Author:    MMeth
  1004. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1005. '**                             allow the user to step backwards.)
  1006. '**
  1007. '*************************************************************************
  1008.  
  1009. PUBLIC FUNCTION PreCopyConfigDOC (prodno%, network$, direction$, lic%) AS STRING
  1010.    PreCopyConfigDOC = gNEXT
  1011.  
  1012. END FUNCTION
  1013.  
  1014.  
  1015. '*************************************************************************
  1016. '** FUNCTION  AddTheBillBoardsDOC (prodno%, network$, direction$, nbytes&)
  1017. '**
  1018. '** Purpose: This is where to add the billboards using the function:
  1019. '**          AddToBillboardList. Use nbytes& as the last parameter to
  1020. '**          the MS-SETUP function AddToBillboardList
  1021. '**
  1022. '** In Symbols : 
  1023. '** Out Symbols: 
  1024. '**            
  1025. '** Arguments:  All paremeters are **read only**. 
  1026. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1027. '**                   toolkit in the order in which you were registered.
  1028. '**                   When your product is part of SmartSuite, SmartSuite
  1029. '**                   will always be product #1. (prodno% >=1)
  1030. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1031. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1032. '**                      then step backwards
  1033. '**           nbytes: Determines the duration of billboard timing.
  1034. '**             NOTE: Make sure to use billboard Ids that are unique to
  1035. '**                   your product. e.g. IDD_DOCBILLBD1_BMP & 
  1036. '**                   DB_DOCBILLBD1_BMP
  1037. '**     
  1038. '** Errors:    No return code for errors, you must Raise them
  1039. '** Author:    MMeth
  1040. '** Returns:   return: gNEXT |  gBACK (If you are showing UI and you
  1041. '**                             allow the user to step backwards.)
  1042. '**
  1043. '*************************************************************************
  1044.  
  1045. PUBLIC FUNCTION AddTheBillBoardsDOC (prodno%, network$, direction$, nbytes&) AS STRING
  1046.    AddTheBillBoardsDOC = direction$
  1047.    '' In the backwards case, keep backing up
  1048.    If direction$ = gBACK Then
  1049.       EXIT FUNCTION
  1050.    End If
  1051.  
  1052.  
  1053. END FUNCTION
  1054.  
  1055.  
  1056. '*************************************************************************
  1057. '** FUNCTION PostCopyConfigDOC (prodno%, network$, direction$, programgroup$) AS STRING
  1058. '**
  1059. '** Purpose: This is called just after file copy has completed.
  1060. '**          This is your opportunity to do all the configuaration
  1061. '**          you need.  This includes:
  1062. '**          
  1063. '**          1. Writing to all your ini files
  1064. '**             Don't worry about ini files related to shared components
  1065. '**          2. Writing to OLE registration database
  1066. '**             Don't worry about OLE registration related to shared 
  1067. '**             components
  1068. '**          3. Writing to any other config files you may support
  1069. '**          4. Writing out user registration information,
  1070. '**             no matter how your product picks up this info
  1071. '**          5. Create any working directories
  1072. '**             A working directory is one that does not contain any
  1073. '**             files, thus the toolkit did not create it for you.
  1074. '**
  1075. '**          NOTE: THERE are many subtleties in here if you are
  1076. '**                dealing with node and CD installs.  In particular,
  1077. '**                you must be ***very*** careful to understand where the
  1078. '**                things are that you are pointing to.  They could
  1079. '**                be on the node, server, or CD!  This, in combination
  1080. '**                with the INF file for Server/Node, is probably the 
  1081. '**                trickiest part of writing a quality install.  When 
  1082. '**                configuring, you must be careful to consider what 
  1083. '**                happens if there is a pre-existing product on the 
  1084. '**                machine, in the same location or
  1085. '**                another one!  This is very very tricky.  What happens
  1086. '**                if you had a full installation previously in location C:\FOO
  1087. '**                and now the user is installing a minimum installation in loaction
  1088. '**                D:\FOO. 
  1089. '**
  1090. '**                Each and every thing you do for configuartion needs very
  1091. '**                careful thought.
  1092. '**
  1093. '**                WE support a function Lot_WhereIsFeature("FeatureID")
  1094. '**                This currrently tells you the location of a feature
  1095. '**                if the feature appears both in the SERVER.INF and the
  1096. '**                NODE.INF referred to by the same Keyword ID.
  1097. '**                We do not support CDs with this command yet, but we will 
  1098. '**                at some time.
  1099. '**
  1100. '**                Also look out for writing to a file when the directory
  1101. '**                doesn't exist.  If the user deselected one of your
  1102. '**                options, your install may still be running, but since
  1103. '**                there were no files to copy into the directory
  1104. '**                it wasn't created by the toolkit!
  1105. '**
  1106. '**                Finally, remember that configuration files generally
  1107. '**                hold the state that the user has customized earlier.
  1108. '**                Sometimes you don't want to overwrite these!
  1109. '**                You will primarily use three MS-SETUP functions
  1110. '**                in here: 
  1111. '**                1. CreateIniKeyValue  (writing to ini files)
  1112. '**                2. SetRegKeyValue     (writing to OLE reg DB)
  1113. '**
  1114. '**                CreateProgmanGroup &  ShowProgmanGroup are
  1115. '**                done for you by the time you reach this
  1116. '**                function.
  1117. '**
  1118. '**                You will not have to do any configuration of LOTUS SHARED
  1119. '**                tools.  The toolkit will do this for you.
  1120. '** In Symbols : 
  1121. '** Out Symbols: 
  1122. '**            
  1123. '** Arguments:  All paremeters are **read only**. 
  1124. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1125. '**                   toolkit in the order in which you were registered.
  1126. '**                   When your product is part of SmartSuite, SmartSuite
  1127. '**                   will always be product #1. (prodno% >=1)
  1128. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1129. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1130. '**                      then step backwards
  1131. '**    programgroup$: The name of the program group where the user chose to
  1132. '**                   install the program manager icons     
  1133. '**
  1134. '** Errors:    No return code for errors, you must Raise them
  1135. '** Author:    MMeth
  1136. '** Returns:   return: gNEXT 
  1137. '**
  1138. '*************************************************************************
  1139.  
  1140. PUBLIC FUNCTION PostCopyConfigDOC (prodno%, network$, direction$, programgroup$) AS STRING
  1141. DIM ripath$, notused%, acroinipath$, wininipath$, DOCDIR$, acropath$, windir$
  1142. DIM     docpersonal$, Lotusinipath$
  1143.  
  1144.    PostCopyConfigDOC = direction$
  1145.    '' In the backwards case, keep backing up
  1146.    If direction$ = gBACK Then
  1147.       EXIT FUNCTION
  1148.    End If
  1149.  
  1150.    If network$ <> gNODE$ Then 
  1151.       SetSymbolValue SYM_CDDRIVE$, GetSymbolValue(SYM_INSTALL_SOURCE)
  1152.    End If
  1153.    
  1154.    If network$ = gSERVER$ OR network$ = gDISTRIBUTION Then
  1155.       GOTO SKIPCONFIG
  1156.    End If
  1157.  
  1158.    if Lot_IsTheFeatureInstalled ("DOCFILES") <> FALSE then
  1159.  
  1160.       DOCDIR$ = Lot_WhereIsFeature(prodno%, "DOCFILES", "acroread.exe")
  1161.       acropath$ = DOCDIR$ + "acroread.exe"
  1162.  
  1163.       '** write entries in win.ini for atm
  1164.       windir$ = GetWindowsDir()
  1165.       wininipath$ = windir$ + "win.ini"  
  1166.  
  1167.       CreateIniKeyValue wininipath$, LdString(SID_DOC_DISPLAY), "UseGDI", "1", cmoOverwrite
  1168.       CreateIniKeyValue wininipath$, LdString(SID_DOC_EXTENSIONS), "PDF", acropath$ + " ^.PDF", cmoOverwrite
  1169.  
  1170.       '** write entries in acroread.ini
  1171.       DOCDIR$ = Lot_WhereIsFeature(prodno%, "DOCFILES", "acroread.exe")
  1172.       if DOCDIR$ <> "" then
  1173.  
  1174.      acroinipath$ = windir$ + "acroread.ini"
  1175.          
  1176.      if DoesFileExist(acroinipath$, femExists) then
  1177.  
  1178.         docpersonal$ = Lot_TrimEndSlash(DOCDIR$)
  1179.             CreateIniKeyValue acroinipath$, "AdobeViewer", "User", GetSymbolValue(SYM_NAME$), cmoOverwrite
  1180.         CreateIniKeyValue acroinipath$,"Directories","Personal",docpersonal$,cmoOverwrite
  1181.  
  1182.      end if 
  1183.      
  1184.      Lotusinipath$ = GetWindowsDir() + "lotus.ini"
  1185.  
  1186.      If network$ = gNode$ then
  1187.             docpersonal$ = GetSymbolValue(SYM_STF_SRCDIR$) + "acroread"
  1188.          End if
  1189.     
  1190.  
  1191.  
  1192.     '**** Write product specific registry keys
  1193.     AddRegistryKeysDOC prodno%, network$    
  1194.  
  1195.  
  1196.         '**
  1197.       
  1198.     '** Write the uninstaller - but only for the primary language
  1199.     if network$ = gSTANDARD$ then
  1200.         if GetSymbolValue(SYM_INSTALLKIND$) <> gLANGUAGEINSTALL$ then
  1201.             notused% = Lot_RegisterUninstaller ( _
  1202.                             LdString (SID_DOC_PROD_NAME),_
  1203.                               LdString (SID_DOC_PROD_VER),_
  1204.                      LdString (SID_DOC_COMMERCIALNAME), _
  1205.                      MakePath(GetSymbolValue("INSTDIR"),"DOC.inf"),_
  1206.                      TRUE,_
  1207.                      FALSE,_
  1208.                      GetSymbolValue(SYM_INSTALL_LANGUAGE$),_
  1209.                        "","","")
  1210.         end if
  1211.     elseif network$ = gNODE$ then
  1212.              if GetSymbolValue (SYM_SINGLESMARTSUITE$) = gSMARTSUITE$ then
  1213.             if GetSymbolValue(SYM_INSTALLKIND$) <> gLANGUAGEINSTALL$ then
  1214.                 notused% = Lot_RegisterUninstaller ( _
  1215.                                 LdString (SID_DOC_PROD_NAME),_
  1216.                                   LdString (SID_DOC_PROD_VER),_
  1217.                          LdString (SID_DOC_COMMERCIALNAME), _
  1218.                          MakePath(GetSymbolValue("DOCDIR"),"DOCnode.inf"),_
  1219.                          TRUE,_
  1220.                          FALSE,_
  1221.                          GetSymbolValue(SYM_INSTALL_LANGUAGE$),_
  1222.                          "","","")
  1223.             end if
  1224.                   else
  1225.             if GetSymbolValue(SYM_INSTALLKIND$) <> gLANGUAGEINSTALL$ then
  1226.                 notused% = Lot_RegisterUninstaller ( _
  1227.                                 LdString (SID_DOC_PROD_NAME),_
  1228.                                   LdString (SID_DOC_PROD_VER),_
  1229.                          LdString (SID_DOC_COMMERCIALNAME), _
  1230.                          MakePath(GetSymbolValue("DOCDIR"),"docnode.inf"),_
  1231.                          TRUE,_
  1232.                          FALSE,_
  1233.                          GetSymbolValue(SYM_INSTALL_LANGUAGE$),_
  1234.                          "","","")
  1235.             end if
  1236.             end if
  1237.     end if
  1238.  
  1239.  
  1240.     ''****** Comment out the Lotus.ini stuff for now...
  1241.     '' CreateIniKeyValue Lotusinipath$, "Lotus Applications", "DocOnline",_
  1242.     '' docpersonal$ + LdString(SID_DOC_LTSINI_NAME) , cmoOverwrite
  1243.    
  1244.       end if
  1245.      
  1246.    end if
  1247.  
  1248.  
  1249. SKIPCONFIG:
  1250.  
  1251. END FUNCTION
  1252.  
  1253. '*************************************************************************
  1254. '** PUBLIC SUB AddRegistryKeysDOC (prodno%, network$) 
  1255. '**
  1256. '** Purpose: This is called just after file copy has completed.
  1257. '**          1. Add product specific Registry Keys.
  1258. '**
  1259. '**           Each and every thing you do for configuartion needs very
  1260. '**           careful thought.
  1261. '**
  1262. '** In Symbols : 
  1263. '** Out Symbols: 
  1264. '**            
  1265. '** Arguments:  All paremeters are **read only**. 
  1266. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1267. '**                   toolkit in the order in which you were registered.
  1268. '**                   When your product is part of SmartSuite, SmartSuite
  1269. '**                   will always be product #1. (prodno% >=1)
  1270. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1271. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1272. '**                      then step backwards
  1273. '**    programgroup$: The name of the program group where the user chose to
  1274. '**                   install the program manager icons     
  1275. '**
  1276. '** Errors:    No return code for errors, you must Raise them
  1277. '** Author:    PMD
  1278. '**
  1279. '*************************************************************************
  1280. PUBLIC SUB AddRegistryKeysDOC (prodno%, network$) 
  1281. DIM LocPath$, Filename$, descript$, gbuf$, instvalue&,nLength&,installfrom$
  1282. DIM szkey$, szkey2$, nsize&, nsize1&,nsize2&,Insttype$,nsize3,installPath$
  1283. DIM RegStatus&, keyvalue$, keyvalue1$,keyvalue2$, keyvalue3$, keyvalue4$
  1284. DIM exe$, szPath2$,szPath$,docdir$,bookpath$,notused%,nNameLength&,szExeName$
  1285.  
  1286.     DOC_RegisterSharedComponent "WIN32SHRUINST", "Uninstall", "1.0"
  1287.     DOC_RegisterSharedComponent "WIN32SHRUINSTLANGEN", "Uninstall", "1.0"
  1288.  
  1289.    docdir$ = Lot_WhereIsFeature(prodno%, "DOCFILES", "acroread.exe")
  1290.     'print "DOCDIR=" docdir$
  1291.  
  1292.  
  1293.     ' Doc main level registry stuff.
  1294.     if Lot_IsTheFeatureInstalled ("DOCFILES") <> FALSE then
  1295.  
  1296.     
  1297.       installfrom$ = GetSymbolValue(SYM_STF_SRCDIR$)
  1298.       'print "Addregkey= " installfrom$
  1299.     
  1300.     szKey$   = LdString(SID_DOC_REGISTRY_KEY)
  1301.       regStatus& = Lot_RegCreateKeyEx (HKEY_LOCAL_MACHINE, szKey$)
  1302.  
  1303.  
  1304. ' If network$ = gNODE$ or network$ = gSERVER$ Then 
  1305. If network$ = gNODE$ Then 
  1306.     'print "net type in node Addreg=" network$
  1307.         'If server install PDFpath and Path are the same
  1308.  
  1309.  
  1310.          szPath2$ = GetSymbolValue ("DOCDIRNAME")
  1311.          'print"This is DOCDIR=" szPath2$
  1312.  
  1313.         '** Path
  1314.        szExeName$ = LdString(SID_DOC_DOCEXE)
  1315.        nNameLength& = len (szExeName$) + 1
  1316.        szPath$ =  GetSymbolValue(SYM_STF_SRCDIR$) 
  1317.       'szPath$ = Lot_TrimEndSlash (szPath$)
  1318.       nLength& = len (szPath$) + 1
  1319.       regStatus = regStatus + Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, szKey$, _
  1320.       LdString(SID_DOC_REGISTRY_PATH), REG_SZ, szPath$, nLength&)
  1321.       installPath$ = szPath$
  1322.  
  1323.  
  1324.        regStatus = regStatus + Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, szKey$, _
  1325.        "Name", REG_SZ, szExeName$, nNameLength&)
  1326.     
  1327.    
  1328.     '** Register for uninstaller.
  1329. ''    notused% = Lot_RegisterObject("DOCTOP", UNIN_CLASS_REGISTRY_HIVE$, _
  1330. ''            "HKEY_LOCAL_MACHINE\"+ szKey$)
  1331.  
  1332.  
  1333.         '** PDFpath
  1334.       bookpath$ = LdString(SID_DOC_BOOK_DIR) 
  1335.       szPath$ = docdir$ + bookpath$
  1336.  
  1337.      ' szPath$ = Lot_TrimEndSlash (szPath$)
  1338.       nLength& = len (szPath$) + 1
  1339.       regStatus = regStatus + Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, szKey$, _
  1340.       LdString(SID_DOC_REGISTRY_PDFPATH), REG_SZ, szPath$, nLength&)            
  1341.       installPath$ = szPath$
  1342.  
  1343.       
  1344.  
  1345.      Lot_RegisterObject "DOCTOP",UNIN_CLASS_REGISTRY_HIVE$,"HKEY_CLASSES_ROOT\.PDF"
  1346.  
  1347.   Else
  1348.  
  1349.  
  1350.         '** Path
  1351.        szExeName$ = LdString(SID_DOC_DOCEXE)
  1352.        nNameLength& = len (szExeName$) + 1
  1353.       szPath$ = GetSymbolValue ("DOCDIR")
  1354.      ' szPath$ = Lot_TrimEndSlash (szPath$)
  1355.       nLength& = len (szPath$) + 1
  1356.       regStatus = regStatus + Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, szKey$, _
  1357.       LdString(SID_DOC_REGISTRY_PATH), REG_SZ, szPath$, nLength&)
  1358.       installPath$ = szPath$
  1359.    
  1360.  
  1361.      regStatus = regStatus + Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, szKey$, _
  1362.        "Name", REG_SZ, szExeName$, nNameLength&)
  1363.  
  1364.  
  1365.         '** Register for uninstaller.
  1366. ''    notused% = Lot_RegisterObject("DOCTOP", UNIN_CLASS_REGISTRY_HIVE$, _
  1367. ''            "HKEY_LOCAL_MACHINE\"+ szKey$)
  1368.  
  1369.         '** PDFpath
  1370.     bookpath$ = LdString(SID_DOC_BOOK_DIR) 
  1371.     
  1372.       szPath$ = MakePath(GetSymbolValue(SYM_STF_SRCDIR$),bookpath$)
  1373.        '    print "DIDIRNAME=" GetSymbolValue ("DOCDIRNAME")
  1374. ''     '    print "proddir=" proddir$
  1375.  
  1376.       'szPath$ = Lot_TrimEndSlash (szPath$)
  1377.       nLength& = len (szPath$) + 1
  1378.       regStatus = regStatus + Lot_CreateRegKeyValueEx (HKEY_LOCAL_MACHINE, szKey$, _
  1379.       LdString(SID_DOC_REGISTRY_PDFPATH), REG_SZ, szPath$, nLength&)
  1380.       installPath$ = szPath$
  1381.    
  1382.        Lot_RegisterObject "DOCTOP",UNIN_CLASS_REGISTRY_HIVE$,"HKEY_CLASSES_ROOT\.PDF"
  1383.       
  1384. End If 
  1385.  
  1386.   ' ** extension association - HCR
  1387.        
  1388.  
  1389.         exe$ = DOCDIR$ + LdString(SID_DOC_DOCEXE) + " " + "%1"
  1390.  
  1391.     szKey$ = LdString(SID_DOC_EXTENSION_NAME) + "\" + LdString(SID_DOC_SHELL) + "\" + LdString(SID_DOC_OPEN) + "\" + LdString(SID_DOC_COMMAND)
  1392.  
  1393. '    regStatus& = Lot_RegCreateKeyEx (HKEY_CLASSES_ROOT, szKey$)
  1394.     
  1395.     szPath$ = LdString(SID_DOC_DOL)
  1396.  
  1397.     nLength& = len (exe$) + 1
  1398.  
  1399. regStatus = Lot_CreateRegKeyValueEx (HKEY_CLASSES_ROOT, szKey$, _
  1400.              LdString(SID_DOC_DEFAULT), REG_SZ, exe$, nLength&)
  1401.  
  1402.  
  1403.  
  1404.  
  1405.  
  1406.  
  1407.  
  1408.      end if 'main level check
  1409.  
  1410.  
  1411. END SUB
  1412. '*************************************************************************
  1413. '** FUNCTION AddIconsDOC (prodno%, network$, direction$, programgroup$) AS STRING
  1414. '**
  1415. '** Purpose: This is called just after file copy has completed.
  1416. '**          1. Add program manager icons of those features
  1417. '**             that were installed.
  1418. '**          NOTE: THERE are many subtleties in here if you are
  1419. '**                dealing with node and CD installs.  In particular,
  1420. '**                you must be ***very*** careful to understand where the
  1421. '**                things are that you are pointing to.  They could
  1422. '**                be on the node, server, or CD!  This, in combination
  1423. '**                with the INF file for Server/Node, is probably the 
  1424. '**                trickiest part of writing a quality install.  When 
  1425. '**                configuring, you must be careful to consider what 
  1426. '**                happens if there is a pre-existing product on the 
  1427. '**                machine, in the same location or
  1428. '**                another one!  This is very very tricky.  What happens
  1429. '**                if you had a full installation previously in location C:\FOO
  1430. '**                and now the user is installing a minimum installation in loaction
  1431. '**                D:\FOO. 
  1432. '**
  1433. '**                Each and every thing you do for configuartion needs very
  1434. '**                careful thought.
  1435. '**
  1436. '**                WE support a function Lot_WhereIsFeature("FeatureID")
  1437. '**                This currrently tells you the location of a feature
  1438. '**                if the feature appears both in the SERVER.INF and the
  1439. '**                NODE.INF referred to by the same Keyword ID.
  1440. '**                We do not support CDs with this command yet, but we will 
  1441. '**                at some time.
  1442. '**
  1443. '**                Also look out for writing to a file when the directory
  1444. '**                doesn't exist.  If the user deselected one of your
  1445. '**                options, your install may still be running, but since
  1446. '**                there were no files to copy into the directory
  1447. '**                it wasn't created by the toolkit!
  1448. '**
  1449. '**                Finally, remember that configuration files generally
  1450. '**                hold the state that the user has customized earlier.
  1451. '**                Sometimes you don't want to overwrite these!
  1452. '**                You will primarily use three MS-SETUP functions
  1453. '**                in here: 
  1454. '**                1. CreateProgmanItem  (writing to progman) 
  1455. '**
  1456. '**                CreateProgmanGroup &  ShowProgmanGroup are
  1457. '**                done for you by the time you reach this
  1458. '**                function.
  1459. '**
  1460. '**                You will not have to do any configuration of LOTUS SHARED
  1461. '**                tools.  The toolkit will do this for you.
  1462. '** In Symbols : 
  1463. '** Out Symbols: 
  1464. '**            
  1465. '** Arguments:  All paremeters are **read only**. 
  1466. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1467. '**                   toolkit in the order in which you were registered.
  1468. '**                   When your product is part of SmartSuite, SmartSuite
  1469. '**                   will always be product #1. (prodno% >=1)
  1470. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1471. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  1472. '**                      then step backwards
  1473. '**    programgroup$: The name of the program group where the user chose to
  1474. '**                   install the program manager icons     
  1475. '**
  1476. '** Errors:    No return code for errors, you must Raise them
  1477. '** Author:    MZ
  1478. '** Returns:   return: gNEXT 
  1479. '**
  1480. '*************************************************************************
  1481.  
  1482. PUBLIC FUNCTION AddIconsDOC (prodno%, network$, direction$, programgroup$) AS STRING
  1483. DIM ripath$,notused%
  1484. DIM installsourcedrive$, book$, ondisklocation$, oncdlocation$
  1485. DIM bookcount%, filebooktitle$, progmanbooktitle$
  1486. DIM docprogramgroup$, linkfolder%
  1487.  
  1488.    AddIconsDOC = direction$
  1489.    '' In the backwards case, keep backing up
  1490.    If direction$ = gBACK Then
  1491.       EXIT FUNCTION
  1492.    End If
  1493.  
  1494.  
  1495.    If network$ = gSERVER$ OR network$ = gDISTRIBUTION Then
  1496.       GOTO SKIPCONFIG
  1497.    End If
  1498.  
  1499.      
  1500.    if network$ = gSTANDARD$ then
  1501.    
  1502.    
  1503.      installsourcedrive$ = GetSymbolValue(SYM_STF_SRCDIR$)
  1504.      oncdlocation$ = installsourcedrive$ + LdString(SID_DOC_BOOK_DIR) 
  1505.  
  1506.    End if
  1507.  
  1508.    
  1509.    
  1510.    if network$ = gNODE$ then
  1511.  
  1512.     installsourcedrive$ = GetSymbolValue(SYM_STF_SRCDIR$)
  1513.     oncdlocation$ = installsourcedrive$ + LdString(SID_DOC_BOOK_DIR)
  1514.        '    print "oncdlocation="   oncdlocation$
  1515.  
  1516.    End if
  1517.  
  1518.    ondisklocation$ = Lot_WhereIsFeature(prodno%,"DOCFILES","acroread.exe") 
  1519. '   print "ondisklocale=" ondisklocation$
  1520.  
  1521.    '*** for book 1
  1522.  
  1523.    filebooktitle$ = LdString(SID_DOC_BOOKTITLE_1)
  1524.    progmanbooktitle$ = LdString(SID_DOC_PROGMAN_BOOKTITLE_1)
  1525.  
  1526.    if Lot_IsTheFeatureInstalled("DOCBOOK_1") <> FALSE then        
  1527.  
  1528.       if IsNewShell() Then
  1529.           
  1530.           linkfolder% = Lot_AddLinkToFolder ( prodno%, ondisklocation$_
  1531.            + LdString(SID_DOC_BOOK_DIR) + filebooktitle$,_
  1532.                 LdString(SID_DOC_FOLDER) + progmanbooktitle$+ ".lnk", "DocOnLine",_
  1533.                   "", ondisklocation$)
  1534.  
  1535. ''          linkfolder% = Lot_AddLinkToFolder ( prodno%, ondisklocation$ + "acroread.exe ",_
  1536. ''                LdString(SID_DOC_FOLDER) + progmanbooktitle$+ ".lnk", "DocOnLine",_
  1537. ''                  ondisklocation$ + LdString(SID_DOC_BOOK_DIR) + filebooktitle$, ondisklocation$)
  1538.                         
  1539.        '** Register the smartsuite folder link for uninstall.
  1540.        notused% = Lot_RegisterObject ("DOCTOP", UNIN_CLASS_SHORTCUT$, _
  1541.                         Lot_GetProgFolder (1) + LdString(SID_DOC_FOLDER) + progmanbooktitle$+ ".lnk")
  1542.  
  1543.       else 
  1544.         IF Lot_IsTheFeatureInstalled("DOCFILES") <> FALSE THEN
  1545.           CreateProgmanItem  docprogramgroup$, progmanbooktitle$, ondisklocation$_
  1546.              + "acroread.exe" + " " + ondisklocation$ + LdString(SID_DOC_BOOK_DIR)_
  1547.              + filebooktitle$, "", cmoOverwrite
  1548.         END IF
  1549.       end if
  1550.  
  1551.    else
  1552.  
  1553.       if IsNewShell() Then
  1554.  
  1555. ''        linkfolder% = Lot_AddLinkToFolder ( prodno%,ondisklocation$ + "acroread.exe ", _
  1556. ''                LdString(SID_DOC_FOLDER) + progmanbooktitle$+".lnk", "DocOnLine",_
  1557. ''                oncdlocation$ + filebooktitle$ , ondisklocation$)
  1558.  
  1559.           linkfolder% = Lot_AddLinkToFolder ( prodno%, oncdlocation$_
  1560.            + filebooktitle$, LdString(SID_DOC_FOLDER) + progmanbooktitle$_
  1561.            + ".lnk", "DocOnLine", "", "")
  1562.  
  1563.        '** Register the smartsuite folder link for uninstall.
  1564.        notused% = Lot_RegisterObject ("DOCTOP", UNIN_CLASS_SHORTCUT$, _
  1565.                         Lot_GetProgFolder (1) + LdString(SID_DOC_FOLDER) + progmanbooktitle$+ ".lnk")
  1566.      
  1567.       else 
  1568.         IF Lot_IsTheFeatureInstalled("DOCFILES") <> FALSE THEN
  1569.           CreateProgmanItem  docprogramgroup$, progmanbooktitle$, ondisklocation$_
  1570.           + "acroread.exe" + " " + oncdlocation$ + filebooktitle$, "", cmoOverwrite
  1571.         END IF
  1572.       end if
  1573.        
  1574.    end if 
  1575.  
  1576.    '*** for book 2
  1577.  
  1578.    filebooktitle$ = LdString(SID_DOC_BOOKTITLE_2)
  1579.    progmanbooktitle$ = LdString(SID_DOC_PROGMAN_BOOKTITLE_2)
  1580.  
  1581.    if Lot_IsTheFeatureInstalled("DOCBOOK_2") <> FALSE then        
  1582.  
  1583.       if IsNewShell() Then
  1584.           
  1585. ''          linkfolder% = Lot_AddLinkToFolder ( prodno%,ondisklocation$ + "acroread.exe ",_
  1586. ''                LdString(SID_DOC_FOLDER) +  progmanbooktitle$+".lnk", "DocOnLine",_
  1587. ''                  ondisklocation$ + LdString(SID_DOC_BOOK_DIR) + filebooktitle$, oncdlocation$)
  1588.  
  1589.           linkfolder% = Lot_AddLinkToFolder ( prodno%, ondisklocation$_
  1590.            + LdString(SID_DOC_BOOK_DIR) + filebooktitle$,_
  1591.                 LdString(SID_DOC_FOLDER) + progmanbooktitle$+ ".lnk", "DocOnLine",_
  1592.                   "", ondisklocation$)
  1593.           
  1594.       '** Register the smartsuite folder link for uninstall.
  1595.        notused% = Lot_RegisterObject ("DOCTOP", UNIN_CLASS_SHORTCUT$, _
  1596.                         Lot_GetProgFolder (1) + LdString(SID_DOC_FOLDER) + progmanbooktitle$+ ".lnk")
  1597.     
  1598.       else 
  1599.         IF Lot_IsTheFeatureInstalled("DOCFILES") <> FALSE THEN
  1600.           CreateProgmanItem  docprogramgroup$, progmanbooktitle$, ondisklocation$_
  1601.              + "acroread.exe" + " " + ondisklocation$ + LdString(SID_DOC_BOOK_DIR)_
  1602.               + filebooktitle$, "", cmoOverwrite
  1603.         END IF
  1604.       end if
  1605.  
  1606.    else
  1607.  
  1608.       if IsNewShell() Then
  1609.  
  1610. ''        linkfolder% = Lot_AddLinkToFolder ( prodno%,ondisklocation$ + "acroread.exe ", _
  1611. ''                LdString(SID_DOC_FOLDER) + progmanbooktitle$+".lnk", "DocOnLine",_
  1612. ''                oncdlocation$ + filebooktitle$ , ondisklocation$)
  1613.             
  1614.           linkfolder% = Lot_AddLinkToFolder ( prodno%, oncdlocation$_
  1615.             + filebooktitle$, LdString(SID_DOC_FOLDER) + progmanbooktitle$_
  1616.             + ".lnk", "DocOnLine", "", "")
  1617.           
  1618.           '** Register the smartsuite folder link for uninstall.
  1619.        notused% = Lot_RegisterObject ("DOCTOP", UNIN_CLASS_SHORTCUT$, _
  1620.                         Lot_GetProgFolder (1) + LdString(SID_DOC_FOLDER) + progmanbooktitle$+ ".lnk")
  1621.       else 
  1622.         IF Lot_IsTheFeatureInstalled("DOCFILES") <> FALSE THEN
  1623.           CreateProgmanItem  docprogramgroup$, progmanbooktitle$, ondisklocation$_
  1624.           + "acroread.exe" + " " + oncdlocation$ + filebooktitle$, "",_
  1625.             cmoOverwrite
  1626.         END IF
  1627.       end if
  1628.        
  1629.    end if
  1630. GOTO SKIPCONFIG
  1631.    '*** for book 3
  1632.  
  1633.    filebooktitle$ = LdString(SID_DOC_BOOKTITLE_3)
  1634.    progmanbooktitle$ = LdString(SID_DOC_PROGMAN_BOOKTITLE_3)
  1635.  
  1636.    if Lot_IsTheFeatureInstalled("DOCBOOK_3") <> FALSE then        
  1637.  
  1638.       if IsNewShell() Then
  1639.           
  1640.           linkfolder% = Lot_AddLinkToFolder ( prodno%,ondisklocation$ + "acroread.exe ",_
  1641.                  LdString(SID_DOC_FOLDER) + progmanbooktitle$+".lnk", "DocOnLine",_
  1642.                   oncdlocation$ + filebooktitle$, ondisklocation$)
  1643.                           
  1644.        '** Register the smartsuite folder link for uninstall.
  1645.        notused% = Lot_RegisterObject ("DOCTOP", UNIN_CLASS_SHORTCUT$, _
  1646.                         Lot_GetProgFolder (1) + LdString(SID_DOC_FOLDER) + progmanbooktitle$+ ".lnk")
  1647.      
  1648.       else 
  1649.       CreateProgmanItem  docprogramgroup$, progmanbooktitle$, ondisklocation$_
  1650.          + "acroread.exe" + " " + oncdlocation$ + filebooktitle$, "",_
  1651.                cmoOverwrite
  1652.       end if
  1653.  
  1654.    else
  1655.  
  1656.       if IsNewShell() Then
  1657.  
  1658.         linkfolder% = Lot_AddLinkToFolder ( prodno%,ondisklocation$ + "acroread.exe ", _
  1659.                 LdString(SID_DOC_FOLDER) + progmanbooktitle$+".lnk", "DocOnLine",_
  1660.                 oncdlocation$ + filebooktitle$ , ondisklocation$)
  1661.  
  1662.            '** Register the smartsuite folder link for uninstall.
  1663.        notused% = Lot_RegisterObject ("DOCTOP", UNIN_CLASS_SHORTCUT$, _
  1664.                         Lot_GetProgFolder (1) + LdString(SID_DOC_FOLDER) + progmanbooktitle$+ ".lnk")
  1665.       else 
  1666.           CreateProgmanItem  docprogramgroup$, progmanbooktitle$, ondisklocation$_
  1667.           + "acroread.exe" + " " + oncdlocation$ + filebooktitle$, "",_
  1668.         cmoOverwrite
  1669.  
  1670.       end if
  1671.        
  1672.    end if
  1673.  
  1674.    '*** for book 4
  1675.  
  1676.    filebooktitle$ = LdString(SID_DOC_BOOKTITLE_4)
  1677.    progmanbooktitle$ = LdString(SID_DOC_PROGMAN_BOOKTITLE_4)
  1678.  
  1679.    if Lot_IsTheFeatureInstalled("DOCBOOK_4") <> FALSE then        
  1680.  
  1681.       if IsNewShell() Then
  1682.           
  1683.           linkfolder% = Lot_AddLinkToFolder ( prodno%,ondisklocation$ + "acroread.exe ",_
  1684.                  LdString(SID_DOC_FOLDER) + progmanbooktitle$+".lnk", "DocOnLine",_
  1685.                   oncdlocation$+ filebooktitle$, oncdlocation$)
  1686.           
  1687.       '** Register the smartsuite folder link for uninstall.
  1688.        notused% = Lot_RegisterObject ("DOCTOP", UNIN_CLASS_SHORTCUT$, _
  1689.                         Lot_GetProgFolder (1) + LdString(SID_DOC_FOLDER) + progmanbooktitle$+ ".lnk")
  1690.     
  1691.       else 
  1692.       CreateProgmanItem  docprogramgroup$, progmanbooktitle$, ondisklocation$_
  1693.          + "acroread.exe" + " " + oncdlocation$ + filebooktitle$, "",_
  1694.                cmoOverwrite
  1695.       end if
  1696.  
  1697.    else
  1698.  
  1699.       if IsNewShell() Then
  1700.  
  1701.         linkfolder% = Lot_AddLinkToFolder ( prodno%,ondisklocation$ + "acroread.exe ", _
  1702.                 LdString(SID_DOC_FOLDER) + progmanbooktitle$+".lnk", "DocOnLine",_
  1703.                 oncdlocation$ + filebooktitle$ , ondisklocation$)
  1704.             
  1705.       '** Register the smartsuite folder link for uninstall.
  1706.        notused% = Lot_RegisterObject ("DOCTOP", UNIN_CLASS_SHORTCUT$, _
  1707.                         Lot_GetProgFolder (1) + LdString(SID_DOC_FOLDER) + progmanbooktitle$+ ".lnk")
  1708.     
  1709.       else 
  1710.           CreateProgmanItem  docprogramgroup$, progmanbooktitle$, ondisklocation$_
  1711.           + "acroread.exe" + " " + oncdlocation$ + filebooktitle$, "",_
  1712.         cmoOverwrite
  1713.  
  1714.       end if
  1715.        
  1716.    end if
  1717.  
  1718.    '*** for book 5
  1719.  
  1720.    filebooktitle$ = LdString(SID_DOC_BOOKTITLE_5)
  1721.    progmanbooktitle$ = LdString(SID_DOC_PROGMAN_BOOKTITLE_5)
  1722.  
  1723.    if Lot_IsTheFeatureInstalled("DOCBOOK_5") <> FALSE then        
  1724.  
  1725.       if IsNewShell() Then
  1726.           
  1727.           linkfolder% = Lot_AddLinkToFolder ( prodno%,ondisklocation$ + "acroread.exe ",_
  1728.                  LdString(SID_DOC_FOLDER) + progmanbooktitle$+".lnk", "DocOnLine",_
  1729.                   oncdlocation$+ filebooktitle$, ondisklocation$)
  1730.           
  1731.       else 
  1732.       CreateProgmanItem  docprogramgroup$, progmanbooktitle$, ondisklocation$_
  1733.          + "acroread.exe" + " " + oncdlocation$ + filebooktitle$, "",_
  1734.                cmoOverwrite
  1735.       end if
  1736.  
  1737.    else
  1738.  
  1739.       if IsNewShell() Then
  1740.  
  1741.         linkfolder% = Lot_AddLinkToFolder ( prodno%,ondisklocation$ + "acroread.exe ", _
  1742.                 LdString(SID_DOC_FOLDER) + progmanbooktitle$+".lnk", "DocOnLine",_
  1743.                 oncdlocation$ + filebooktitle$ , ondisklocation$)
  1744.             
  1745.         '** Register the smartsuite folder link for uninstall.
  1746.        notused% = Lot_RegisterObject ("DOCTOP", UNIN_CLASS_SHORTCUT$, _
  1747.                         Lot_GetProgFolder (1) + LdString(SID_DOC_FOLDER) + progmanbooktitle$+ ".lnk")
  1748.  
  1749.       else 
  1750.           CreateProgmanItem  docprogramgroup$, progmanbooktitle$, ondisklocation$_
  1751.           + "acroread.exe" + " " + oncdlocation$ + filebooktitle$, "",_
  1752.         cmoOverwrite
  1753.  
  1754.       end if
  1755.        
  1756.    end if
  1757.  
  1758.  
  1759.    '*** for book 6 
  1760.    filebooktitle$ = LdString(SID_DOC_BOOKTITLE_6)
  1761.    progmanbooktitle$ = LdString(SID_DOC_PROGMAN_BOOKTITLE_6)
  1762.  
  1763.    if Lot_IsTheFeatureInstalled("DOCBOOK_6") <> FALSE then        
  1764.  
  1765.       if IsNewShell() Then
  1766.           
  1767.           linkfolder% = Lot_AddLinkToFolder ( prodno%,ondisklocation$ + "acroread.exe ",_
  1768.                  LdString(SID_DOC_FOLDER) + progmanbooktitle$+".lnk", "DocOnLine",_
  1769.                   oncdlocation$+filebooktitle$, ondisklocation$)
  1770.  
  1771.        '** Register the smartsuite folder link for uninstall.
  1772.        notused% = Lot_RegisterObject ("DOCTOP", UNIN_CLASS_SHORTCUT$, _
  1773.                         Lot_GetProgFolder (1) + LdString(SID_DOC_FOLDER) + progmanbooktitle$+ ".lnk")      
  1774.  
  1775.       else 
  1776.       CreateProgmanItem  docprogramgroup$, progmanbooktitle$, ondisklocation$_
  1777.          + "acroread.exe" + " " + oncdlocation$ + filebooktitle$, "",_
  1778.                cmoOverwrite
  1779.       end if
  1780.  
  1781.    else
  1782.  
  1783.       if IsNewShell() Then
  1784.  
  1785.         linkfolder% = Lot_AddLinkToFolder ( prodno%,ondisklocation$ + "acroread.exe ", _
  1786.                 LdString(SID_DOC_FOLDER) + progmanbooktitle$+".lnk", "DocOnLine",_
  1787.                 oncdlocation$ + filebooktitle$ , ondisklocation$)
  1788.             
  1789.  
  1790.         '** Register the smartsuite folder link for uninstall.
  1791.        notused% = Lot_RegisterObject ("DOCTOP", UNIN_CLASS_SHORTCUT$, _
  1792.                         Lot_GetProgFolder (1) + LdString(SID_DOC_FOLDER) + progmanbooktitle$+ ".lnk")
  1793.  
  1794.       else 
  1795.           CreateProgmanItem  docprogramgroup$, progmanbooktitle$, ondisklocation$_
  1796.           + "acroread.exe" + " " + oncdlocation$ + filebooktitle$, "",_
  1797.         cmoOverwrite
  1798.  
  1799.       end if
  1800.        
  1801.    end if
  1802.  
  1803.    '*** for book 7 
  1804.  
  1805.    filebooktitle$ = LdString(SID_DOC_BOOKTITLE_7)
  1806.    progmanbooktitle$ = LdString(SID_DOC_PROGMAN_BOOKTITLE_7)
  1807.  
  1808.    if Lot_IsTheFeatureInstalled("DOCBOOK_7") <> FALSE then        
  1809.  
  1810.       if IsNewShell() Then
  1811.           
  1812.           linkfolder% = Lot_AddLinkToFolder ( prodno%,ondisklocation$ + "acroread.exe ",_
  1813.                  LdString(SID_DOC_FOLDER) + progmanbooktitle$+".lnk", "DocOnLine",_
  1814.                   oncdlocation$+filebooktitle$, ondisklocation$)
  1815.  
  1816.           '** Register the smartsuite folder link for uninstall.
  1817.        notused% = Lot_RegisterObject ("DOCTOP", UNIN_CLASS_SHORTCUT$, _
  1818.                         Lot_GetProgFolder (1) + LdString(SID_DOC_FOLDER) + progmanbooktitle$+ ".lnk")  
  1819.  
  1820.       else 
  1821.       CreateProgmanItem  docprogramgroup$, progmanbooktitle$, ondisklocation$_
  1822.          + "acroread.exe" + " " + oncdlocation$ + filebooktitle$, "",_
  1823.                cmoOverwrite
  1824.       end if
  1825.  
  1826.    else
  1827.  
  1828.       if IsNewShell() Then
  1829.  
  1830.         linkfolder% = Lot_AddLinkToFolder ( prodno%,ondisklocation$ + "acroread.exe ", _
  1831.                 LdString(SID_DOC_FOLDER) + progmanbooktitle$+".lnk", "DocOnLine",_
  1832.                 oncdlocation$ + filebooktitle$ , ondisklocation$)
  1833.             
  1834.         '** Register the smartsuite folder link for uninstall.
  1835.        notused% = Lot_RegisterObject ("DOCTOP", UNIN_CLASS_SHORTCUT$, _
  1836.                         Lot_GetProgFolder (1) + LdString(SID_DOC_FOLDER) + progmanbooktitle$+ ".lnk")
  1837.  
  1838.       else 
  1839.           CreateProgmanItem  docprogramgroup$, progmanbooktitle$, ondisklocation$_
  1840.           + "acroread.exe" + " " + oncdlocation$ + filebooktitle$, "",_
  1841.         cmoOverwrite
  1842.  
  1843.       end if
  1844.        
  1845.    end if
  1846.  
  1847.  
  1848.    '*** for book 8 
  1849.  
  1850.    filebooktitle$ = LdString(SID_DOC_BOOKTITLE_8)
  1851.    progmanbooktitle$ = LdString(SID_DOC_PROGMAN_BOOKTITLE_8)
  1852.  
  1853.    if Lot_IsTheFeatureInstalled("DOCBOOK_8") <> FALSE then        
  1854.  
  1855.       if IsNewShell() Then
  1856.           
  1857.           linkfolder% = Lot_AddLinkToFolder ( prodno%,ondisklocation$ + "acroread.exe ",_
  1858.                  LdString(SID_DOC_FOLDER) + progmanbooktitle$+".lnk", "DocOnLine",_
  1859.                   oncdlocation$+filebooktitle$, ondisklocation$)
  1860.           
  1861.         '** Register the smartsuite folder link for uninstall.
  1862.        notused% = Lot_RegisterObject ("DOCTOP", UNIN_CLASS_SHORTCUT$, _
  1863.                         Lot_GetProgFolder (1) + LdString(SID_DOC_FOLDER) + progmanbooktitle$+ ".lnk")
  1864.  
  1865.       else 
  1866.       CreateProgmanItem  docprogramgroup$, progmanbooktitle$, ondisklocation$_
  1867.          + "acroread.exe" + " " + oncdlocation$ + filebooktitle$, "",_
  1868.                cmoOverwrite
  1869.       end if
  1870.  
  1871.    else
  1872.  
  1873.       if IsNewShell() Then
  1874.  
  1875.         linkfolder% = Lot_AddLinkToFolder ( prodno%,ondisklocation$ + "acroread.exe ", _
  1876.                 LdString(SID_DOC_FOLDER) + progmanbooktitle$+".lnk", "DocOnLine",_
  1877.                 oncdlocation$ + filebooktitle$ , ondisklocation$)
  1878.             
  1879.           '** Register the smartsuite folder link for uninstall.
  1880.        notused% = Lot_RegisterObject ("DOCTOP", UNIN_CLASS_SHORTCUT$, _
  1881.                         Lot_GetProgFolder (1) + LdString(SID_DOC_FOLDER) + progmanbooktitle$+ ".lnk")
  1882.       else 
  1883.           CreateProgmanItem  docprogramgroup$, progmanbooktitle$, ondisklocation$_
  1884.           + "acroread.exe" + " " + oncdlocation$ + filebooktitle$, "",_
  1885.         cmoOverwrite
  1886.  
  1887.       end if
  1888.        
  1889.    end if
  1890.  
  1891.  
  1892.  '*** for book 9 
  1893.  
  1894.    filebooktitle$ = LdString(SID_DOC_BOOKTITLE_9)
  1895.    progmanbooktitle$ = LdString(SID_DOC_PROGMAN_BOOKTITLE_9)
  1896.  
  1897.    if Lot_IsTheFeatureInstalled("DOCBOOK_9") <> FALSE then        
  1898.  
  1899.       if IsNewShell() Then
  1900.           
  1901.           linkfolder% = Lot_AddLinkToFolder ( prodno%,ondisklocation$ + "acroread.exe ",_
  1902.                  LdString(SID_DOC_FOLDER) + progmanbooktitle$+".lnk", "DocOnLine",_
  1903.                   oncdlocation$+filebooktitle$, ondisklocation$)
  1904.           
  1905.           '** Register the smartsuite folder link for uninstall.
  1906.        notused% = Lot_RegisterObject ("DOCTOP", UNIN_CLASS_SHORTCUT$, _
  1907.                         Lot_GetProgFolder (1) + LdString(SID_DOC_FOLDER) + progmanbooktitle$+ ".lnk")
  1908.  
  1909.       else 
  1910.       CreateProgmanItem  docprogramgroup$, progmanbooktitle$, ondisklocation$_
  1911.          + "acroread.exe" + " " + oncdlocation$ + filebooktitle$, "",_
  1912.                cmoOverwrite
  1913.       end if
  1914.  
  1915.    else
  1916.  
  1917.       if IsNewShell() Then
  1918.  
  1919.         linkfolder% = Lot_AddLinkToFolder ( prodno%,ondisklocation$ + "acroread.exe ", _
  1920.                 LdString(SID_DOC_FOLDER) + progmanbooktitle$+".lnk", "DocOnLine",_
  1921.                 oncdlocation$ + filebooktitle$ , ondisklocation$)
  1922.  
  1923.        '** Register the smartsuite folder link for uninstall.
  1924.        notused% = Lot_RegisterObject ("DOCTOP", UNIN_CLASS_SHORTCUT$, _
  1925.                         Lot_GetProgFolder (1) + LdString(SID_DOC_FOLDER) + progmanbooktitle$+ ".lnk")        
  1926.  
  1927.       else 
  1928.           CreateProgmanItem  docprogramgroup$, progmanbooktitle$, ondisklocation$_
  1929.           + "acroread.exe" + " " + oncdlocation$ + filebooktitle$, "",_
  1930.         cmoOverwrite
  1931.  
  1932.       end if
  1933.        
  1934.    end if
  1935.  
  1936.  
  1937.    
  1938.     
  1939.    SKIPCONFIG:
  1940.  
  1941. END FUNCTION
  1942.  
  1943.  
  1944.  
  1945. '*************************************************************************
  1946. '** FUNCTION PostSuccessRegDOC (prodno%, network$, direction$) AS STRING
  1947. '**
  1948. '** Purpose: If you need to launch something after install runs
  1949. '** In Symbols : 
  1950. '** Out Symbols: 
  1951. '**            
  1952. '** Arguments:  All paremeters are **read only**. 
  1953. '**          prodno%: This is your prodno%.  It is assigned to you by the
  1954. '**                   toolkit in the order in which you were registered.
  1955. '**                   When your product is part of SmartSuite, SmartSuite
  1956. '**                   will always be product #1. (prodno% >=1)
  1957. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  1958. '**       direction$: gNEXT 
  1959. '**
  1960. '** Errors:    No return code for errors, you must Raise them
  1961. '** Author:    MMeth
  1962. '** Returns:   return: gNEXT 
  1963. '**
  1964. '*************************************************************************
  1965.  
  1966. PUBLIC FUNCTION PostSuccessRegDOC (prodno%, network$, direction$) AS STRING
  1967.  
  1968.    PostSuccessRegDOC = direction$
  1969.    '' In the backwards case, keep backing up
  1970.    If direction$ = gBACK Then
  1971.       EXIT FUNCTION
  1972.    End If
  1973.  
  1974. END FUNCTION
  1975.  
  1976.  
  1977. '********************************
  1978. '********************************
  1979. '** Product Specific Functions **
  1980. '********************************
  1981. '********************************
  1982.  
  1983. '*************************************************************************
  1984. '** FUNCTION GetDOCPathfromLotusIni() AS STRING
  1985. '**
  1986. '** Purpose: Gets the product dir path from Lotus.ini file, and searches for
  1987. '**          acronym.exe in the product dir path. 
  1988. '**            
  1989. '** Author:    JYOTI KEDIA, JMD
  1990. '** Arguments: None
  1991. '** Returns:   if acronym.exe does not exist in dir specified in lotus.ini, it
  1992. '**            returns "", otherwise returns the full path to the product.
  1993. '**            NOTE: changed to not include product name by JMD
  1994. '**             includes trailing backslash
  1995. '*************************************************************************
  1996.  
  1997. FUNCTION GetDOCPathfromLotusIni() AS STRING
  1998. DIM DestDir$, lotusinipath$, defdir$, temp%, ProdDir$, fullpath$, rv%
  1999. DIM szkey$, keyvalue$, nsize&, gbuf$, ret&
  2000.    DestDir$ = GetWindowsDir()
  2001.    lotusinipath$ = DestDir$ +"lotus.ini"
  2002.  
  2003.    if DoesFileExist(lotusinipath$,femExists) then
  2004.       defdir$ = GetIniKeyString(lotusinipath$,"Lotus Applications", "DocOnline")
  2005.       if defdir$ <> "" then
  2006.      temp% = INSTR(1,LCASE$(defdir$),"acroread.exe")
  2007.          
  2008.          'print temp% 
  2009.      
  2010.      if temp% <> 0 then
  2011.         ProdDir$ = MID$(defdir$,1,(temp%-1))
  2012.         if ProdDir$ <> "" then
  2013.            
  2014.                
  2015.            fullpath$ = ProdDir$ + "acroread.exe"
  2016.  
  2017.            'print fullpath$
  2018.            if DoesFileExist(fullpath$, femExists) then
  2019.           rv% = Lot_CleanPath(fullpath$)
  2020.  
  2021.           'print ProdDir$
  2022.           GetDOCPathfromLotusIni = ProdDir$
  2023.           EXIT FUNCTION
  2024.            end if 
  2025.         end if 
  2026.      end if 
  2027.       end if 
  2028.    end if
  2029.  
  2030.    GetDOCPathfromLotusIni = ""
  2031.  
  2032. END FUNCTION
  2033.  
  2034. '*************************************************************************
  2035. '** Purpose: Finds out the installed languages and determines the nature
  2036. '**  of the install.  If not running automated, displays a message box for
  2037. '**  a language install
  2038. '**  
  2039. '** Author: JMDonohue
  2040. '** Arguments:  All parameters are **read only**. 
  2041. '**          prodno%: This is your prodno%.  It is assigned to you by the
  2042. '**                   toolkit in the order in which you were registered.
  2043. '**                   When your product is part of SmartSuite, SmartSuite
  2044. '**                   will always be product #1. (prodno% >=1)
  2045. '**         network$: gSTANDARD | gSERVER | gNODE | gDISTRIBTUION
  2046. '**       direction$: gNEXT | gBACK (If gBACK, and you are showing UI)
  2047. '**                      then step backwards
  2048. '**   
  2049. '** Returns:  (not used)
  2050. '**   
  2051. '**  Implicitly sets the following global symbols for later processing: 
  2052. '**   SYM_INSTALLKIND$
  2053. '**   SYM_INSTALLKINDS$ (list)
  2054. '**  Sets the following global symbols (based on product #1) for later 
  2055. '**  processing: 
  2056. '**   SYM_REG_PRODUCTNAME$
  2057. '**   SYM_REG_PRODUCTVER$
  2058. '*************************************************************************
  2059. PUBLIC FUNCTION InitLanguageDOC (prodno%, network$, direction$) AS STRING
  2060. DIM szProductName$, szProductVersion$, szInstallKind$, szLanguageSubdir$ 
  2061.  
  2062.    szProductName$ =  LdString(SID_DOC_PROD_NAME)
  2063.    szProductVersion$ =  LdString(SID_DOC_PROD_VER)
  2064.     if prodno% = 1 THEN
  2065.         SetSymbolValue SYM_REG_PRODUCTNAME$ , szProductName$
  2066.         SetSymbolValue SYM_REG_PRODUCTVER$ , szProductVersion$ 
  2067.     END IF
  2068.    InitLanguages szProductName$, szProductVersion$, prodno%     
  2069.     InitLanguageDOC  = ""
  2070. END FUNCTION
  2071.  
  2072.  
  2073. '*************************************************************************
  2074. '** DOCMOREDIRSCB
  2075. '** Purpose:  This SUB handles the processing for the MORE DIRECTORIES    
  2076. '**           dialog.  
  2077. '**
  2078. '** IN SYMBOLS  handle to dialog, Control ID, Class, Instance
  2079. '**     
  2080. '** Author: Michael Natsis
  2081. '** Arguments:
  2082. '**     
  2083. '**     
  2084. '** Returns:
  2085. '**     
  2086. '*************************************************************************
  2087. SUB DOCMOREDIRSCB (hDlg&, CtrlId%, Classes$, LInst&)
  2088.    DIM dirChanged1%, dirChanged2%, dirChanged3%, i%, notused% 
  2089.    DIM drvSel%,Inst%, dirToChange1$, dirToChange2$,dirToChange3$
  2090.    STATIC drvIndex%(1 to MAX_NO_DRIVECOMBOS)
  2091.  
  2092.    '** unc start
  2093.    DIM    uncPath$, fullPath$, dirPath$, drvPath$, n%, hCombo&  '** MZ
  2094.    DIM    curCombo$, uncOff&, unusedPath$, NumDirs%
  2095.    DIM    comboBox$, editBox$,dirToChange$ 
  2096.    '** unc end
  2097.  
  2098.    Inst% = CINT(LInst&)
  2099.  
  2100. '** unc start
  2101. '** Handle all the combo boxes here (if any)
  2102.    IF INSTR(Classes$, "IDC_COMBO") THEN
  2103.       i% = VAL(MID$(Classes$, 10, LEN(Classes$) - 9))
  2104.       comboBox = "IDC_COMBO"+Right$(Str$(i%),1)
  2105.       editBox = "IDC_EDIT"+Right$(Str$(i%),1)
  2106.       drvIndex%(i%) = Inst%
  2107.       curCombo$ = GetListItem(comboBox, Inst%)
  2108.       fullPath$ = GetListItem("IDC_EDIT",i)
  2109.       Lot_SplitUNCPath fullPath$, uncPath$, dirPath$
  2110.       uncOff& = INSTR(1, curCombo$, "\\") 
  2111.       IF uncOff > 0 THEN
  2112.     Lot_SplitUNCPath MID$(curCombo$, uncOff&), uncPath$, unusedPath$
  2113.       ELSE
  2114.     uncPath$ = ""
  2115.       END IF
  2116.       SetListItem "IDC_EDIT", i, uncPath$ + dirPath$
  2117.       AddListItem SYM_UPDATELIST$, editBox
  2118.       EXIT SUB
  2119.    END IF
  2120. '** unc end
  2121.  
  2122.  
  2123.  
  2124.    SELECT CASE Classes$
  2125.     
  2126.       CASE "__DLGINIT"
  2127.  
  2128.     '** This is the directory for the Work Files
  2129.     Lot_GetDriveFreeSpaceList "IDC_COMBO1"
  2130.     SetListItem "IDC_EDIT", 1, GetSymbolValue("DOCWORKDIR")
  2131.     drvIndex%(1) = ValidateEditBox(hDlg& , 1)
  2132.     AddListItem SYM_UPDATELIST$, "IDC_EDIT1"
  2133.  
  2134.             
  2135.      '** This is the directory for the Smart Master Files
  2136.     Lot_GetDriveFreeSpaceList "IDC_COMBO2"
  2137.     SetListItem "IDC_EDIT", 2, GetSymbolValue("DOCMASTERSDIR")
  2138.     drvIndex%(1) = ValidateEditBox(hDlg& , 2)
  2139.     AddListItem SYM_UPDATELIST$, "IDC_EDIT2"
  2140.  
  2141.      '** This is the directory for the Backup Files
  2142.     Lot_GetDriveFreeSpaceList "IDC_COMBO3"
  2143.     SetListItem "IDC_EDIT", 3, GetSymbolValue("DOCBACKUPDIR")
  2144.     drvIndex%(1) = ValidateEditBox(hDlg& , 3)
  2145.     AddListItem SYM_UPDATELIST$, "IDC_EDIT3"
  2146.  
  2147.       CASE "IDC_COMBO"
  2148.     SELECT CASE Inst%
  2149.       CASE 1
  2150.            dirChanged1% = TRUE
  2151.  
  2152.       CASE 2
  2153.            dirChanged2% = TRUE
  2154.  
  2155.       CASE 3 
  2156.            dirChanged3% = TRUE
  2157.  
  2158.     END SELECT
  2159.  
  2160.      CASE "IDC_BRWSDIR"
  2161.     drvSel% = ValidateBrowse(hDlg&,Inst%)
  2162.     SELECT CASE Inst%      
  2163.       
  2164.     CASE 1  
  2165.      dirChanged1% = TRUE
  2166.         
  2167.     CASE 2  
  2168.      dirChanged2% = TRUE
  2169.      
  2170.     CASE 3  
  2171.      dirChanged3% = TRUE
  2172.       
  2173.     END SELECT       
  2174.  
  2175.      CASE "IDC_EDIT"
  2176.      SELECT CASE Inst%
  2177.        CASE 1       
  2178.          dirChanged1% = TRUE                        
  2179.                 
  2180.         CASE 2
  2181.          dirChanged2% = TRUE        
  2182.  
  2183.         CASE 3
  2184.          dirChanged3% = TRUE
  2185.         
  2186.      END SELECT
  2187.  
  2188.      CASE "IDC_OK"
  2189.         '** Validate Paths always: to check for a file with the same name
  2190.  
  2191.         '** WorkDir 
  2192.         '** unc start 1
  2193.         drvSel% = ValidateEditBox(hDlg& , 1)
  2194.         IF drvSel% = 0 THEN
  2195.         SetListItem "__LASTSTATUS", 1, "Q"
  2196.         EXIT SUB
  2197.         ELSE 
  2198.         drvIndex%(1) = drvSel%
  2199.         END IF
  2200.         Lot_SplitUNCPath GetListItem("IDC_EDIT",1), uncPath$, dirPath$
  2201.         IF uncPath$ = "" THEN
  2202.         drvPath = LEFT$(GetListItem("IDC_COMBO1",drvIndex%(1)), 2)
  2203.         ELSE
  2204.         drvPath = ""
  2205.         END IF
  2206.         dirToChange1$ = drvPath$ + uncPath + dirPath$
  2207.         '** unc end
  2208.  
  2209.         IF ValidatePath(dirToChange1$) = FALSE THEN
  2210.         SetListItem "_LASTSTATUS",1,"Q"
  2211.         EXIT SUB
  2212.  
  2213.         ELSE
  2214.         SetSymbolValue "DOCWORKDIR", dirToChange1$
  2215.   
  2216.         END IF
  2217.  
  2218.  
  2219.         '** SMasters
  2220.         '** unc start 2
  2221.         drvSel% = ValidateEditBox(hDlg& , 2)
  2222.         IF drvSel% = 0 THEN
  2223.            SetListItem "__LASTSTATUS", 1, "Q"
  2224.            EXIT SUB
  2225.         ELSE 
  2226.            drvIndex%(2) = drvSel%
  2227.         END IF
  2228.         Lot_SplitUNCPath GetListItem("IDC_EDIT",2), uncPath$, dirPath$
  2229.         IF uncPath$ = "" THEN
  2230.            drvPath = LEFT$(GetListItem("IDC_COMBO2",drvIndex%(2)), 2)
  2231.         ELSE
  2232.            drvPath = ""
  2233.         END IF
  2234.         dirToChange2$ = drvPath$ + uncPath + dirPath$
  2235.         '** unc end
  2236.         IF ValidatePath(dirToChange2$) = FALSE THEN
  2237.         SetListItem "_LASTSTATUS",1,"Q"
  2238.         ELSE 
  2239.         SetSymbolValue "DOCMASTERSDIR", dirToChange2$
  2240.         END IF
  2241.  
  2242.  
  2243.         '** Backup
  2244.         '** unc start 3
  2245.         drvSel% = ValidateEditBox(hDlg& , 3)
  2246.        IF drvSel% = 0 THEN
  2247.           SetListItem "__LASTSTATUS", 1, "Q"
  2248.           EXIT SUB
  2249.        ELSE 
  2250.           drvIndex%(3) = drvSel%
  2251.        END IF
  2252.           Lot_SplitUNCPath GetListItem("IDC_EDIT",3), uncPath$, dirPath$
  2253.        IF uncPath$ = "" THEN
  2254.           drvPath = LEFT$(GetListItem("IDC_COMBO3",drvIndex%(3)), 2)
  2255.        ELSE
  2256.           drvPath = ""
  2257.        END IF
  2258.        dirToChange3$ = drvPath$ + uncPath + dirPath$
  2259.        IF ValidatePath(dirToChange3$) = FALSE THEN
  2260.         SetListItem "_LASTSTATUS",1,"Q"
  2261.  
  2262.        ELSE 
  2263.         SetSymbolValue "DOCBACKUPDIR", dirToChange3$
  2264.        END IF 
  2265.    
  2266.  
  2267.  
  2268. END SELECT   'Classes
  2269.  
  2270. END SUB
  2271.  
  2272.  
  2273.  
  2274. FUNCTION DetectPreviousVersion ( Productfound$ ) AS STRING
  2275. DIM destpath$, temp%, dirpath$, adwpath$, pathDOC$, suitversion$ 
  2276. DIM lotusiniPath$, acroreadinipath$, acroreadpath$, defdir$
  2277. DIM     smartextpath$, smartextinipath$, Docversion$
  2278.  
  2279.     lotusiniPath$ = GetWindowsDir() + "lotus.ini"
  2280.  
  2281.     if DoesFileExist(lotusinipath$,femExists) then
  2282.        defdir$ = GetIniKeyString(lotusiniPath$,"Lotus Applications", "DocOnline")
  2283.        'print defdir$
  2284.        temp% = INSTR(1,LCASE$(defdir$),"release")
  2285.        'print temp%
  2286.  
  2287.        if temp% <> 0 then
  2288.       Docversion$ = MID$(defdir$,(temp%+8),3)
  2289.           'print Docversion$
  2290.        end if                 
  2291.  
  2292.     else
  2293.        Docversion$ = "0"
  2294.     End if
  2295.  
  2296.     SetSymbolValue "DOCOBSDIR1", "lotsuite\"+"SMARTEXT\"
  2297.     SetSymbolValue "DOCOBSDIR2", "lotsuite\"+LdString(SID_DOC_DIR)
  2298.  
  2299.     DetectPreviousVersion = "No"
  2300.  
  2301.       
  2302.     smartextinipath$ = GetWindowsDir() + "stxr30.ini"
  2303.     IF DoesFileExist(smartextiniPath$, femExists) Then
  2304.       smartextpath$ =  GetIniKeyString( smartextinipath$, "SmarText", "NOTEPATH")
  2305.       if ( smartextpath$ <> "" ) Then
  2306.      temp% = Lot_cleanPath (smartextpath$)
  2307.      pathDOC$ = smartextpath$ + "reader.exe"
  2308.  
  2309.          If DoesFileExist(pathDOC$, femExists) Then
  2310.         DetectPreviousVersion = "YES"
  2311.         Productfound = "True"
  2312.         SetSymbolValue "DOCOBSDIR1", smartextpath$
  2313.          End if
  2314.       end if
  2315.  
  2316.     End IF
  2317.  
  2318.  
  2319.     acroreadinipath$ = GetWindowsDir() + "acroread.ini"
  2320.     acroreadpath$ =  GetIniKeyString( acroreadinipath$, "Directories", "Personal")
  2321.  
  2322.     If ( acroreadpath$ <> "" ) AND ( Docversion$ <> "2.1" )Then
  2323.  
  2324.       temp% = Lot_cleanPath (acroreadpath$)
  2325.       pathDOC$ = acroreadpath$ + "acroread.exe"
  2326.     
  2327.       If DoesFileExist(pathDOC$, femExists) Then
  2328.      DetectPreviousVersion = "YES"
  2329.          Productfound = "True"
  2330.          SetSymbolValue "DOCOBSDIR2", acroreadpath$
  2331.       
  2332.       end if
  2333.     End if
  2334.  
  2335.     
  2336.     defdir$ = GetDOCPathfromLotusIni()
  2337.     If ( ( defdir$ <> "" ) AND ( Docversion$ = "2.1")) Then
  2338.        DetectPreviousVersion = "YES"
  2339.        Productfound = "False"
  2340.     End If
  2341.        
  2342.     
  2343.  
  2344. END FUNCTION
  2345.  
  2346. '****************************************************************************
  2347. '** SUB DOCRemoveProdFilesCB (hDlg&, CtrlId%, Classes%, Inst&)
  2348. '**
  2349. '** Purpose: callback to handle Remove Files dialog.
  2350. '**
  2351. '** Author:  BMK 7/18/95 (significantly modified by TLB, and then jshaw)
  2352. '** Arguments: hDlg%, CtrlId%, Classes$, Inst%
  2353. '** Returns:   NONE
  2354. '****************************************************************************
  2355. SUB DOCRemoveProdFilesCB(hDlg&, CtrlId%, Classes$, LInst&) 
  2356. DIM nSections%, count%, chpt$, sym$, notused%
  2357.  
  2358.     nSections% = 2
  2359.     SELECT CASE Classes$
  2360.         case "__DLGINIT"
  2361.             AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT1)
  2362.             AddListItem SYM_NORMALFONT$, STR$(IDC_TEXT2)
  2363.             AddListItem SYM_UPDATELIST$, SYM_NORMALFONT$
  2364.         case "IDC_OK"
  2365.             for count% = 1 to nSections% 
  2366.                 sym$ = "DOCOBSFILES" + LTRIM$(STR$(count%))
  2367.                 chpt$ = Lot_GetChapterFromKeyWord (sym$)
  2368.                 if chpt$ <> "" then
  2369.                      notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 1)
  2370.                 end if
  2371.  
  2372.  
  2373.             next
  2374.         case "IDC_BACK"
  2375.             ' reset INF sections to OFF in case user changes his/her mind
  2376.             for count% = 1 TO nSections% 
  2377.                 sym$ = "DOCOBSFILES" + LTRIM$(STR$(count%))
  2378.                 chpt$ = Lot_GetChapterFromKeyWord(sym$)
  2379.                 if chpt$ <> "" then
  2380.                     notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 0)
  2381.                 end if                                                                                                             
  2382.             next
  2383.         case "IDC_EXIT"
  2384.             ' reset INF sections to OFF in case user changes his/her mind
  2385.             for count% = 1 TO nSections% 
  2386.                 sym$ = "DOCOBSFILES" + LTRIM$(STR$(count%))
  2387.                 chpt$ = Lot_GetChapterFromKeyWord(sym$)
  2388.                 if chpt$ <> "" then
  2389.                     notused% = Lot_SetChapterFilesInCopyListInOrOut (chpt$, 0)
  2390.                 end if
  2391.             next
  2392.     END SELECT
  2393. END SUB
  2394.  
  2395. SUB DOC_RegisterSharedComponent(Key$, FileName$, Version$)
  2396. '*************************************************************************
  2397. '** Purpose:    This product routines registers the shared component for the
  2398. '**                product and writes an entry in cinstall.ini for uninstall
  2399. '**
  2400. '** IN SYMBOLS  handle to dialog, Control ID, Class, Instance
  2401. '**     
  2402. '** Author: Michael Natsis (stolen from flw.lss by JMD)
  2403. '** Arguments:
  2404. '**    Key$            Shared section keyword, "WIN32SHRSMARTICONPRG", e.g.
  2405. '**    FileName$    Name of shared component, "Icon Palette", e.g.
  2406. '**    Version$        Version of shared component, "6.0", e.g.
  2407. '**     
  2408. '*************************************************************************
  2409. DIM szProductName$, szProductVersion$, RegKeyName$, regStatus&
  2410.  
  2411. szProductName$ =  LdString(SID_DOC_PROD_NAME)
  2412. szProductVersion$ =  LdString(SID_DOC_PROD_VER)
  2413.  
  2414. IF Lot_IsTheFeatureInstalled(Key$) <> FALSE THEN
  2415.     RegKeyName$ = gREGLOTUS + szProductName$ + "\" + szProductVersion$ + _
  2416.      "\Components\" + FileName$ + "\" + Version$
  2417.     regStatus& = Lot_RegCreateKeyEx(HKEY_LOCAL_MACHINE, RegKeyName$)
  2418. '   Lot_RegisterObject Key$, UNIN_CLASS_REGISTRY_KEY$, gHLM$ + "\" + RegKeyName$
  2419. END IF
  2420.  
  2421. END SUB
  2422.     
  2423.